You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django如何通过单视图函数+单URL路由处理多分类页面?

完全可以实现,整套方案不需要复制任何视图、路由、模板代码,所有分类页面共用一套逻辑,后续维护成本极低。

具体实现步骤

1. 配置带参数的通用路由

不需要为每个分类单独配置URL,只需要写一条带分类名捕获规则的路由即可,访问不同分类路径时会自动把分类名作为参数传给视图:

# 你的app/urls.py文件
from django.urls import path
from . import views

urlpatterns = [
    # 示例:访问 /tools/design/、/tools/develop/ 这类路径时,会自动把design/develop作为category_name参数传入视图
    path('tools/<str:category_name>/', views.product_category_page, name='category_page'),
]

2. 编写通用视图函数

只需要写一个视图函数,接收路由传入的分类名参数完成数据筛选即可,建议加上分类不存在的404处理,避免访问无效分类时抛错:

# 你的app/views.py文件
from django.shortcuts import render, get_object_or_404
from .models import Product, Category

def product_category_page(request, category_name):
    # 校验分类是否存在,不存在直接返回404页面
    current_category = get_object_or_404(Category, name=category_name)
    # 筛选当前分类下的所有产品,和你之前单个分类视图的筛选逻辑完全一致
    products = Product.objects.filter(category__name=category_name)
    # 传入模板的上下文,除了产品列表额外把当前分类传过去,方便模板展示分类标题等动态内容
    context = {
        'products': products,
        'current_category': current_category
    }
    # 渲染同一个Tools.html模板,不需要复制多份模板文件
    return render(request, 'Tools.html', context)

3. 模板适配(仅需微调原有模板,不需要复制)

你原来的Tools.html里遍历产品渲染卡片的逻辑完全不需要改动,只需要把原来写死的分类标题、面包屑这类静态内容替换成动态变量即可:

<!-- 把原来写死的分类名换成动态变量 -->
<h2>{{ current_category.name }}工具列表</h2>
<div class="product-card-wrapper">
{% for product in products %}
<div class="product-card">
    <img src="{{ product.cover.url }}" alt="{{ product.name }}">
    <p class="desc">{{ product.description }}</p>
    <p class="price">¥{{ product.sell_price }}</p>
    <a href="{{ product.buy_url }}" class="buy-btn">立即购买</a>
</div>
{% empty %}
<p>当前分类暂无上架产品</p>
{% endfor %}
</div>
后续维护说明
  • 页面跳转时直接用模板标签{% url 'category_page' category_name=对应分类的name字段 %}生成链接即可,不需要硬编码路径
  • 后续新增产品分类时,只需要在分类表新增对应数据、上传对应分类的产品,不需要修改任何视图、路由、模板代码,新分类页面自动生效
  • 如果需要给不同分类加差异化逻辑,只需要在这个通用视图里针对category_name做分支判断即可,不需要拆分新视图

内容的提问来源于stack exchange,提问作者3an

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 18:09:23