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

Django中如何从嵌套元组的分类配置中提取并显示分类文本名称

问题根因
  • 你模板中调用的{{ listing.category }}是Listing对象的字段原始值,也就是存在数据库里的字母编码,没有做映射转换
  • 视图里的查询语句存在隐含bug:category__in = category[0]写法不规范,若入参category是单个字符串编码,直接等值查询即可
解决方案(两种可选)

方案1:直接使用Django内置choices字段显示方法(最推荐)

只要你的Listing模型中category字段定义时指定了choices=CATEGORIES参数,Django会自动生成get_字段名_display()方法,直接在模板里调用即可,不需要改视图代码:

<li>Category: {{ listing.get_category_display }}</li>

方案2:视图层面提前转换分类文本

如果不想用内置方法,也可以在视图中批量给每个listing对象添加分类文本属性:
修改views.py的逻辑:

def show_category_listings(request, category):
    # 修正查询逻辑,单值查询不需要用__in
    listings = Listing.objects.filter(category=category)
    cat_map = dict(CATEGORIES)
    # 批量给每个listing加分类名称属性
    for listing in listings:
        listing.category_name = cat_map[listing.category]
    return render(request, 'auctions/categSpecific.html', {
        "listings": listings,
        "category": cat_map[category]
    })

然后修改模板代码:

<li>Category: {{ listing.category_name }}</li>
额外优化提示

你当前视图context里传的category变量是当前页面对应的分类文本,如果你只是要在页面顶部展示当前分类,直接用{{ category }}即可,不需要遍历listing的时候再取。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 15:42:03