【问题标题】:How to parse list of lists in django template?如何解析 django 模板中的列表列表?
【发布时间】:2017-01-24 09:45:16
【问题描述】:
{% for repo in repo_info %}
{% for branch in branch_info[forloop.counter] %}
<li>Branch Name --> {{ branch }}</li>
{% endfor %}
{% endfor %}
branch_info 是一个列表列表。
它给了我无法解析剩余部分的错误 ---> branch_info[forloop.counter]
有什么方法可以解析同时也是列表的列表元素?
【问题讨论】:
标签:
python
django
list
django-templates
【解决方案1】:
您可以创建一个简单的template tag,返回请求索引处的数据
# some file named my_template_tags.py
@register.simple_tag
def at_index(data, index):
return data[index]
如果您使用无效索引,这将引发异常。如果您不想要异常,则必须捕获它并返回一些有效数据。
它也可以与字典一起使用,但你传入的是键而不是索引。
{% load my_template_tags %}
{% for repo in repo_info %}
{% for branch in branch_info|at_index:forloop.counter %}
<li>Branch Name --> {{ branch }}</li>
{% endfor %}
{% endfor %}
【解决方案2】:
大多数情况下,当您的模板代码开始变得如此混乱时,这意味着您的数据结构不正确。在这种情况下,您似乎依赖于 repo_info 和 branch_info 作为“并行序列”(branch_info[x] 的数据用于repo_info[x] 的回购)。
最干净的解决方案是让repo 保存它自己的branch 列表,这样您就可以迭代repo_info,然后为每个repo 迭代repo.branches。
如果您不能以这种方式轻松构建数据,另一种解决方案是在您的视图中将zip(或itertools.izip)repo_info 和branch_info 放在一起,以便您可以迭代模板中的(repo, branches) 元组。