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

Django跳转分类商品页报错:Reverse for 'products_category'未找到

解决Django表单选择分类后跳转的反向解析错误

你遇到的错误源于两个核心问题:

  • products_category的URL路由未定义参数,但你在redirect时传递了products_po_category关键字参数,Django无法匹配对应路由
  • 试图直接传递QuerySet作为URL参数,这是不允许的——URL参数仅支持字符串、数字等可序列化类型

以下是分步解决方案:

步骤1:修正URL配置

在urls.py中为products_category路径添加分类参数(根据你的category类型调整,示例用字符串类型匹配分类名称):

from django.urls import path
from first.views import productsHTML, productHTML, products_category

urlpatterns = [
    # 添加分类参数,支持通过分类名称匹配路由
    path("products_category/<str:category>", products_category, name="products_category"),
    path("productsHTML/<str:uuid>", productHTML, name="productHTML"),
    path("productsHTML/", productsHTML, name="productsHTML"),
]

步骤2:修改productsHTML视图的跳转逻辑

不再传递QuerySet,改为传递选中的分类值,让目标视图自行查询数据:

from django.shortcuts import render, redirect
from .models import Product
from .forms import CategoryChoice

def productsHTML(request):
    form = CategoryChoice(request.POST or None)
    if request.method == 'POST' and form.is_valid():
        category = form.cleaned_data['category']
        # 传递分类值到路由,而非QuerySet
        return redirect('products_category', category=category, permanent=True)
    all_products = Product.objects.all()
    context = {
        'form': form,
        'products': all_products,
    }
    return render(request, "products.html", context) 

步骤3:修改products_category视图的参数接收与数据查询

接收分类参数后,在视图内部查询对应分类的商品:

def products_category(request, category):
    # 根据传入的分类值查询商品
    products_po_category = Product.objects.filter(category=category)
    context = {
        "products_po_category": products_po_category
    }
    return render(request, "product_category.html", context)

额外说明(若category为外键模型)

如果Product模型的category是关联Category模型的外键,需做如下调整:

  1. URL改为使用ID匹配:path("products_category/<int:category_id>", products_category, name="products_category")
  2. productsHTML视图传递分类ID:return redirect('products_category', category_id=category.id)
  3. products_category视图通过ID查询:
def products_category(request, category_id):
    products_po_category = Product.objects.filter(category__id=category_id)
    context = {
        "products_po_category": products_po_category
    }
    return render(request, "product_category.html", context)

内容的提问来源于stack exchange,提问作者Глеб Гудалин

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 11:17:32