Python django模板使用模板变量作为索引获取列表项

Python django模板使用模板变量作为索引获取列表项,python,django,django-templates,Python,Django,Django Templates,假设一个list0包含元素['a'、'b'、'c'、'd'],我需要根据模板变量或模板中可用的任何其他整数获取第n个元素 到目前为止,我找到的更好的方法是创建一个自定义标记,如中所述或中所述。 定义后,您可以编写如下内容: {% for elm in list0 %} {{ elm }} {{ list1|index:forloop.counter0 }} {% endfor %} 该示例假设存在另一个列表list1,其中包含元素['A'、'B'、'C'、'D'] index是自定义筛选器的名

假设一个
list0
包含元素
['a'、'b'、'c'、'd']
,我需要根据模板变量或模板中可用的任何其他整数获取第n个元素

到目前为止,我找到的更好的方法是创建一个自定义标记,如中所述或中所述。
定义后,您可以编写如下内容:

{% for elm in list0 %}
{{ elm }} {{ list1|index:forloop.counter0 }}
{% endfor %}
该示例假设存在另一个列表
list1
,其中包含元素
['A'、'B'、'C'、'D']

index
是自定义筛选器的名称,它使用forloop计数器作为索引来获取每个
list1
元素:
list1[0]
list1[1]
list1[2]
list1[3]

这就产生了:

a A
b B
c C
d D
但是如果您只想使用内置过滤器呢?
(或者有空余时间做娱乐活动?
经过一些研究和测试,我发现的唯一方法是这样一件奇怪的事情:

{% for elm in list0 %}

{% with sl0=forloop.counter0|make_list sl1=forloop.counter|make_list %}
{% with header_id=sl0.0|add:":"|add:sl1.0 %}

{{ elm }} {{ list1|slice:header_id|join:"" }}

{% endwith %}
{% endwith %}

{% endfor %}
它的作用是:

它使用内置过滤器。slice需要一个表示python列表部分的字符串,如
'[2:3]
,它是由第二个
with
和两个
add
生成的。因此需要使用forloop计数器一次切片一个成员:
'[0:1]'
'[1:2]'
'[2:3]
…但是
forloop.counter0
forloop.counter
是整数,在这种情况下,
add
不会生成字符串。它试图得到一个整数作为结果。因此需要将其转换为字符串。这就是为什么在第一个
中使用
make_list
,因为这是迄今为止我发现的唯一一种将整数转换为字符串的方法。最后,slice返回一个包含一个元素的列表,因此它使用
连接:
将其转换为字符串

我希望我在文档中遗漏了一些东西,因为上面的代码是。。好。。很可怕,但很有趣

如何使用django模板内置项以有效的方式满足这一需求?

我同意在视图中而不是在模板中构建上下文时应该处理它,但我们可以说这是不可能的。

在模板中不应该这样做,模板是用于呈现逻辑的,它取决于视图提供正确的结构。我们可以通过以下方式做到这一点:

从django.exe导入渲染
定义我的视图(请求):
列表0=['a','b','c','d']
列表1=['A','B','C','D']
list01=zip(list0,list1)
返回呈现(请求'some_template.html',{'list01':list01})
然后使用以下命令渲染此内容:

{% for elm0, elm1 in list01 %}

{{ elm0 }} {{ elm1 }}

{% endfor %}
{%elm0,列表01%中的elm1}
{{elm0}}{{elm1}}

{%endfor%}
在视图
zip_obj=zip(list0,list1)
中,在模板
{%for elm0,elm1 In zip_obj%}
中,为什么所有这些索引以及模板中没有的内容?您也没有遗漏文档中的任何内容,因为将模板与逻辑分离是一个深思熟虑的设计决策。@AbdulAzizBarkat:是的,这是为了避免这里发生的事情,人们编写复杂的代码,通常需要大量的周期。谢谢。在我的问题中,请注意“我同意在视图中而不是在模板中构建上下文时应该处理它,但假设它无法完成。”。显然我知道zip()。另外,既然有一个切片模板过滤器,为什么不使用索引过滤器呢?谢谢,但请参阅我上面的评论
{% for elm0, elm1 in list01 %}

{{ elm0 }} {{ elm1 }}

{% endfor %}