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

Django模板中如何通过索引从列表获取元素?

问题解决:Django模板中变量作为索引无法生效的处理方案

问题原因

在Django模板语法里,model.get_fields.counter会被直接解析为获取model.get_fields里名为"counter"的属性/键,而不是把counter变量的数值当作索引去取值——这就是你手动输入数字能生效,但用变量就不行的核心原因。

解决方案

方案1:自定义模板过滤器(推荐)

通过自定义过滤器实现“用变量作为索引取值”的功能:

  1. 在你的Django应用目录下创建templatetags文件夹(没有的话新建),里面创建__init__.py和custom_filters.py两个文件。
  2. 在custom_filters.py中写入以下代码:
from django import template

register = template.Library()

@register.filter
def get_item(obj, key):
    try:
        return obj[key]
    except (KeyError, IndexError, TypeError):
        return ''
  1. 在需要使用的模板顶部加载过滤器:
{% load custom_filters %}
  1. 修改原代码,用过滤器实现变量索引:
{% for question in model.get_questions %}
 {% with counter=forloop.counter %}
  {{ question }} {{ model.get_fields|get_item:counter }} <br>
 {% endwith %}
{% endfor %}

方案2:视图层预处理配对数据

如果不想写过滤器,可以在视图里把问题和对应的字段提前配对好,再传给模板:
比如在视图函数中:

# 注意:forloop.counter从1开始,若model.get_fields是0索引的列表,需调整切片匹配索引
question_field_pairs = zip(model.get_questions, model.get_fields[1:])
context = {'question_field_pairs': question_field_pairs}

然后模板里直接遍历配对后的组合:

{% for question, field in question_field_pairs %}
  {{ question }} {{ field }} <br>
{% endfor %}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 22:52:16