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模型的外键,需做如下调整:
- URL改为使用ID匹配:
path("products_category/<int:category_id>", products_category, name="products_category") productsHTML视图传递分类ID:return redirect('products_category', category_id=category.id)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,提问作者Глеб Гудалин
相关产品推荐
相关产品推荐

