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

Django模板渲染特定属性对象:如何展示指定分类的产品?

解决Django模板中筛选特定分类产品的问题

你遇到的核心问题是:Product模型的category字段是ForeignKey关联的Category对象,而非字符串,所以直接用instance.category == 'Statues'做比较是不成立的——你是在拿一个Category对象和字符串对比,结果必然是False,导致筛选逻辑失效。

下面给你两种可行的解决思路:

1. 修改模板代码直接实现筛选

既然你的Category模型__str__方法返回的是categoryname,你可以直接访问关联对象的categoryname字段来做判断:

{% for instance in object_list %}
    {% if instance.category.categoryname == 'Statues' %}
        <!-- 在这里渲染你的产品内容,比如: -->
        <div class="product">
            <h3>{{ instance.name }}</h3>
            <p>{{ instance.price }}</p>
        </div>
    {% endif %}
{% endfor %}

考虑到你给category字段设置了blank=True, null=True,为了避免空对象报错,建议加上非空判断:

{% for instance in object_list %}
    {% if instance.category and instance.category.categoryname == 'Statues' %}
        <!-- 渲染产品内容 -->
    {% endif %}
{% endfor %}

2. 在视图层提前过滤(更推荐)

模板的核心职责是渲染内容,把数据过滤逻辑放在视图层会更高效,也更符合Django的MVC设计思想。比如如果你用的是ListView,可以重写get_queryset方法:

# views.py
from django.views.generic import ListView
from .models import Product

class ProductListView(ListView):
    model = Product
    template_name = '你的模板路径.html'

    def get_queryset(self):
        # 只筛选分类为Statues的产品
        return Product.objects.filter(category__categoryname='Statues')

这样模板里就不需要任何判断逻辑,直接遍历object_list即可:

{% for instance in object_list %}
    <div class="product">
        <h3>{{ instance.name }}</h3>
        <p>{{ instance.price }}</p>
    </div>
{% endfor %}

如果你的分类是固定的,还可以给Category模型添加常量避免硬编码字符串,进一步优化:

# models.py
class Category(models.Model):
    STATUES = 'Statues'
    # 可以添加其他分类常量
    CATEGORY_CHOICES = [
        (STATUES, 'Statues'),
        # 比如 ('Paintings', 'Paintings')
    ]
    categoryname = models.CharField(max_length=20, choices=CATEGORY_CHOICES)
    description = models.CharField(max_length=200, blank=True, null=True)

    def __str__(self):
        return self.categoryname

之后视图里就可以用Product.objects.filter(category__categoryname=Category.STATUES),这样能减少拼写错误的概率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 10:47:28