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

Django模板中循环迭代变量索引无效,整数索引正常的问题咨询

Django模板循环中变量索引返回None的原因及解决办法

问题原因

你遇到的问题是Django模板引擎的语法特性导致的:

  • 第一段代码里的{{con.hotel.i}},模板会把i当作con.hotel的固定属性名去查找,而不是循环变量i的实际取值(比如0、1这类索引值)。如果con.hotel没有名为i的属性,就会返回None。
  • 第二段代码里的{{con.hotel1.0}}是直接使用整数字面量作为索引,模板能正确识别这是对序列(比如列表、元组)的索引操作,所以能返回对应的值。

解决方法

方法1:自定义模板过滤器实现动态取值

创建一个自定义过滤器来支持通过变量动态获取属性或索引值:

  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)
  1. 在模板中加载并使用过滤器:
{% 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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 16:48:24