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

Django模板中如何在if语句中引用模板标签值

解决Django模板中if语句判断变量相等的问题

嘿,你的思路没问题,就是模板里的语法用错啦!

你当前模板里的if判断写法是错误的:

{% if stat.division = {{ division }} %}

在Django模板的{% if %}标签里,不需要再用{{ }}包裹变量,而且相等判断要用双等号==,不是单等号=。

修正后的模板代码

把seasonstandings.html里的判断语句改成这样就可以正常工作了:

{% for division in divisions %}
    {{ division }} <br>
    {% for stat in stats %}
        {% if stat.division == division %}
            {{ stat.team }}<br>
        {% endif %}
    {% endfor %}
{% endfor %}

额外优化建议:提前分组提升效率

不过你当前的两层循环会遍历所有stats多次(每个分区遍历一次),当数据量变大时效率会下降。可以在视图层提前按分区分组,让模板代码更简洁高效:

修改后的views.py

from itertools import groupby
from operator import itemgetter

def seasonstandings(request):
    # 先按分区排序,再按积分倒序
    stats = WeeklyStats.objects.values('player__team__team_name').annotate(
        team=F('player__team__team_name'),
        points=Sum('finishes'),
        division=F('player__team__division__name')
    ).order_by('division', '-points')
    
    # 按分区字段分组
    grouped_stats = groupby(stats, key=itemgetter('division'))
    # 转换成字典,键是分区名,值是对应分区的球队数据列表
    division_teams = {division: list(teams) for division, teams in grouped_stats}
    
    return render(request, 'website/seasonstandings.html', {'division_teams': division_teams})

简化后的模板代码

{% for division, teams in division_teams.items %}
    {{ division }} <br>
    {% for team in teams %}
        {{ team.team }}<br>
    {% endfor %}
{% endfor %}

这样不仅代码更简洁,还避免了重复遍历数据,性能更好。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:07:34