Django模板中循环迭代变量索引无效,整数索引正常的问题咨询
Django模板循环中变量索引返回None的原因及解决办法
问题原因
你遇到的问题是Django模板引擎的语法特性导致的:
- 第一段代码里的
{{con.hotel.i}},模板会把i当作con.hotel的固定属性名去查找,而不是循环变量i的实际取值(比如0、1这类索引值)。如果con.hotel没有名为i的属性,就会返回None。 - 第二段代码里的
{{con.hotel1.0}}是直接使用整数字面量作为索引,模板能正确识别这是对序列(比如列表、元组)的索引操作,所以能返回对应的值。
解决方法
方法1:自定义模板过滤器实现动态取值
创建一个自定义过滤器来支持通过变量动态获取属性或索引值:
- 在你的Django应用下创建
templatetags目录(需包含__init__.py文件),新建custom_tags.py:
from django import template register = template.Library() @register.filter def get_value(obj, key): # 处理字典或对象的属性/索引 if hasattr(obj, '__getitem__'): return obj[key] if key in obj else None return getattr(obj, key, None)
- 在模板中加载并使用过滤器:
{% load custom_tags %} {% for i in l %} <tr> <td>{{ con.hotel|get_value:i }}</td> </tr> {% endfor %}
方法2:提前调整数据结构
在视图函数里把数据转换成更适合模板遍历的结构,比如把分散的hotel1、hotel2等属性整理成列表:
# 视图函数中处理数据 con.hotels = [con.hotel1, con.hotel2, con.hotel3] # 根据实际数量添加
然后模板里直接遍历这个列表:
{% for hotel in con.hotels %} <tr> <td>{{ hotel }}</td> </tr> {% endfor %}
内容的提问来源于stack exchange,提问作者Mohamed chouai
相关产品推荐
相关产品推荐

