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

Django模板中{% if {club.c_type} == 'Tech' %}语句报错,求解决方案

问题解决:Django模板筛选社团类型错误

错误原因

  1. 模板语法错误:你的{% if {club.c_type} == 'Tech' %}语句里,变量club.c_type多套了一层大括号,Django模板的if条件中直接写变量名即可,不需要额外包裹大括号。
  2. 数据匹配错误:模型中c_type字段存储的是choices元组里的第一个值('T'或'NT'),而不是显示用的'Tech'或'Non-Tech',所以直接和'Tech'对比永远不成立,还会触发语法报错。

解决方案

方案一:模板内直接筛选(适合小数据量)

修正语法错误,同时用Django模型提供的get_字段名_display()方法获取choices对应的显示文本,或者直接和存储的键值对比:

方式1:使用显示文本匹配

<!-- 筛选Tech类型社团 -->
{% for club in clubs %}
{% if club.get_c_type_display == 'Tech' %}
    <!-- 这里写Tech社团的展示代码 -->
{% endif %}
{% endfor %}

<!-- 筛选Non-Tech类型社团 -->
{% for club in clubs %}
{% if club.get_c_type_display == 'Non-Tech' %}
    <!-- 这里写Non-Tech社团的展示代码 -->
{% endif %}
{% endfor %}

方式2:直接匹配存储的键值(更高效)

<!-- 筛选Tech类型社团 -->
{% for club in clubs %}
{% if club.c_type == 'T' %}
    <!-- 这里写Tech社团的展示代码 -->
{% endif %}
{% endfor %}

<!-- 筛选Non-Tech类型社团 -->
{% for club in clubs %}
{% if club.c_type == 'NT' %}
    <!-- 这里写Non-Tech社团的展示代码 -->
{% endif %}
{% endfor %}

方案二:视图中提前分类(推荐,减少模板循环次数)

在视图里直接将两类社团分别查询好,再传给模板,避免模板中多次遍历全量数据:

修改视图函数:

def clubs(request):
    # 直接筛选出Tech和Non-Tech社团
    tech_clubs = Clubs.objects.filter(c_type='T')
    non_tech_clubs = Clubs.objects.filter(c_type='NT')
    return render(request, 'clubs.html', {
        'tech_clubs': tech_clubs,
        'non_tech_clubs': non_tech_clubs
    })

模板中直接使用分类好的数据:

<h3>Tech类型社团</h3>
{% for club in tech_clubs %}
    <!-- Tech社团展示代码 -->
{% endfor %}

<h3>Non-Tech类型社团</h3>
{% for club in non_tech_clubs %}
    <!-- Non-Tech社团展示代码 -->
{% endfor %}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 19:24:58