如何在Django模板中使用变量索引访问列表?
比如说,我有两个对象列表,如何在Django模板中使用变量索引访问列表?,django,django-templates,Django,Django Templates,比如说,我有两个对象列表,foo和bar。在Django模板中,当在foo中循环时,有一个计数器跟踪当前索引/迭代,该计数器用于访问条。这里的问题是,我认为Django模板系统不支持使用变量索引访问列表。这是真的吗?如果是这样,是否有解决问题的方法(除了使用硬编码索引重复同一段html/模板代码) 代码演示: {% for x in foo %} <span>{{ x.name }} vs. {{ bar.{{ forloop.counter0 }}.name }}</sp
foo
和bar
。在Django模板中,当在foo
中循环时,有一个计数器跟踪当前索引/迭代,该计数器用于访问条
。这里的问题是,我认为Django模板系统不支持使用变量索引访问列表。这是真的吗?如果是这样,是否有解决问题的方法(除了使用硬编码索引重复同一段html/模板代码)
代码演示:
{% for x in foo %}
<span>{{ x.name }} vs. {{ bar.{{ forloop.counter0 }}.name }}</span>
{% endfor %}
{%forx在foo%}
{{x.name}}vs.{bar.{{{forloop.counter0}}}.name}
{%endfor%}
Django模板不喜欢{{bar.{{forloop.counter0}}}.name}
注意:我使用的是Django 1.4,Django模板不直接允许这样做,这是正确的,因为Django试图强迫您在视图中放置几乎所有的表示逻辑。最好的选择是在视图中的上下文中创建一个dict列表,这样您就可以迭代该列表并按名称访问成员。或:
将您的列表放在一起,而不是将它们作为dict,并使用zip
访问它们李>{%forfooItem,barIteminzippedlist%}
- 使用限制较少的模板语言,如
- 按照Tomita Yuji的建议,使用自定义模板过滤器
签出Django模板中的
slice
过滤器。这绝对是一个比在视图中乱搞列表更干净的解决方案。谢谢。-1因为解决方案实际上还没有满。当导入也被指定时,它总是很有帮助的,而不是我必须去解决它们。缺少的是:来自django.template导入变量,variabledesnotextist
另外,如果某些列表
或某些目录
是从另一个forloop生成的(即实际上不是一个变量),则它不起作用。许多答案不是完整的代码答案,而是想法、伪代码等。所以这是一个相当苛刻的分数。更新。感谢您提及替代方案。谢谢。谢谢你的快速评论;这正是我需要的。
from django.template import Variable, VariableDoesNotExist
@register.assignment_tag()
def resolve(lookup, target):
try:
return Variable(lookup).resolve(target)
except VariableDoesNotExist:
return None
{% resolve some_list some_index as value %}
{% resolve some_dict some_dict_key as value %}