Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Django模板中使用变量索引访问列表?_Django_Django Templates - Fatal编程技术网

如何在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列表,这样您就可以迭代该列表并按名称访问成员。或:

  • zip
    将您的列表放在一起,而不是将它们作为dict,并使用
    {%forfooItem,barIteminzippedlist%}
    访问它们
  • 使用限制较少的模板语言,如
  • 按照Tomita Yuji的建议,使用自定义模板过滤器

对,您无法解析变量名。当然,我们要努力把这个逻辑放在眼里

但有5%的时间,我确实发现这非常有限,有时在视图中需要太多的逻辑/模板作者控制之外需要的更改。我已经接受了一些个人定制,允许在视图中分配变量以及简单的变量解析

但是,使用模板引擎“一个系统中的所有查找”(索引、属性、键)构建这样做的模板标记非常简单


签出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 %}