Django表单分类筛选实现:点击搜索跳转对应商品页
实现分类搜索功能的具体步骤
1. 修改视图函数(views.py)
更新productsHTML函数,处理分类筛选逻辑,同时把表单传入模板:
def productsHTML(request): # 从GET请求里获取用户选择的分类 selected_category = request.GET.get('category') if selected_category: # 筛选对应分类的商品(这里假设Product模型的category字段值和CATEGORY_CHOICES的key匹配) product_list = Product.objects.filter(category=selected_category) else: # 无筛选条件时显示全部商品 product_list = Product.objects.all() # 初始化表单,若有筛选参数则自动保留选中状态 category_form = CategoryChoice(request.GET) return render(request, "products.html", { "products": product_list, "form": category_form })
注意:如果Product的category是外键(比如关联Category模型),把过滤条件改成category__slug=selected_category之类的,匹配你模型里的字段
2. 编写/更新HTML模板(products.html)
渲染表单并绑定提交逻辑,同时展示商品列表:
<!-- 分类搜索表单 --> <form method="GET" action="{% url 'productsHTML' %}"> {{ form.as_p }} <button type="submit">搜索</button> </form> <!-- 商品列表展示 --> <div class="product-list"> {% for product in products %} <div class="product-item"> <a href="{% url 'productHTML' uuid=product.id %}">{{ product.name }}</a> <!-- 按需添加商品价格、图片等信息 --> </div> {% empty %} <p>该分类下暂无商品</p> {% endfor %} </div>
- 用GET方法提交表单,筛选参数会显示在URL中(例如
productsHTML/?category=sport),支持页面刷新和分享 action指定提交到productsHTML命名URL,确保路径正确
3. URL配置无需修改
现有urls.py的配置已经满足需求,不需要新增或修改路径,因为我们通过GET参数传递分类信息。
内容的提问来源于stack exchange,提问作者Глеб Гудалин
相关产品推荐
相关产品推荐

