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
相关产品推荐
相关产品推荐

