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

