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

Django产品详情页无法显示产品问题求助

Django产品详情页无法显示产品信息的解决方案

你的代码存在几个关键问题,导致产品信息无法正常显示,以下是具体修正方案:

问题分析与修正点

1. 上下文变量名不匹配

视图中传递的上下文变量是product(单数),但模板里写成了products.name(复数),变量名不一致导致模板无法获取数据。

2. QuerySet 与单个对象混淆

Products.objects.filter(...)返回的是QuerySet(对象集合),直接在模板中调用.name会报错,详情页应该获取单个产品对象,改用get()方法更合适。

3. 未关联分类与产品

原代码仅单独验证分类和产品存在,但未确保产品属于当前分类,可能出现产品不属于该分类却能访问的异常情况。

4. 上下文拼写错误

视图中contex是拼写错误,正确应为context(虽然Python允许自定义变量名,但遵循规范能避免潜在问题)。

修正后的完整代码

views.py

def product_view(request, cate_slug, prod_slug):
    try:
        # 验证分类存在
        category = Category.objects.get(slug=cate_slug, status=0)
        # 获取该分类下的单个产品(确保slug唯一)
        product = Products.objects.get(category=category, slug=prod_slug, status=0)
        context = {
            'product': product,
        }
        return render(request, "product_view.html", context)
    except Category.DoesNotExist:
        messages.error(request, "分类不存在")
        return redirect("collection")
    except Products.DoesNotExist:
        messages.warning(request, "产品不存在")
        return redirect("collection")

product_view.html

{% extends 'auth.html' %}
{% load static %}

{% block content %}
<h1>{{ product.name }}</h1>
<!-- 可根据需求添加更多产品字段 -->
<p>{{ product.description }}</p>
<p>价格:{{ product.price }}</p>
{% endblock %}

额外说明

  • 使用get()方法时必须捕获DoesNotExist异常,避免出现500服务器错误,这比嵌套if判断更健壮简洁。
  • 确保Products模型中slug字段设置了unique=True,避免多个产品使用相同slug导致的查询问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 18:01:16