【问题标题】:How to achieve list Iteration in django template [duplicate]如何在django模板中实现列表迭代[重复]
【发布时间】:2012-12-24 01:00:43
【问题描述】:

可能重复:
Get list item dynamically in django templates

如何获取具有可变计数器的列表项。目的是获取so项而不是列表

不是这样的

{% for item in listModels %} 
 {{ item | safe }} 

{% endfor %}

所以工作

{% for i in listModels|length|get_range %} // get size list 

 {{ listModels.i | safe }}

{% endfor %}

不工作

{% for i in listModels|length|get_range %} // get size list 

 {{ listModels.i | safe }}

{% endfor %}

【问题讨论】:

    标签: python django for-loop django-templates


    【解决方案1】:

    我修复了以下问题:

    {{ listModelsData|lookup:i|lookAttribute:"author" }} -// this equal listModelsData[i].author - this code in python 
    
    @register.filter
    def lookAttribute (d, token):
         return getattr (d, token)
    

    【讨论】:

      【解决方案2】:

      Django 模板语言为您提供了一种方法...

      {% for item in listModels %} 
       {{ forloop.counter }} 
      
      {% endfor %}
      

      【讨论】:

      • 我会带上计数器的值
      【解决方案3】:

      Django 模板不允许你这样做。我不会教你如何将你的逻辑排除在模板之外,因为我认为这是一种风格选择。但要明白这是最简单的方法。如果需要使用索引,可以将其作为forloop 属性访问,如the documentation 中所述。

      如果你真的想要变量索引,你可以制作自己的自定义模板标签来做到这一点。但是,在这种情况下,我建议你使用更强大的模板语言,比如Jinja2,而不是折磨 Django 模板语言。

      【讨论】:

      • 问题是,第一轮两个列表是否应该是相同数量的元素
      • 我不确定我是否理解您的要求,但如果您说您有两个列表要串联迭代,那么我建议使用 zip 将它们合并到一个元组列表。
      • 这是一个内置函数,当你想用一个循环遍历多个匹配列表时很有用:docs.python.org/2/library/functions.html#zip
      猜你喜欢
      • 2020-08-01
      • 2019-03-05
      • 1970-01-01
      • 2021-10-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-31
      • 2014-08-19
      相关资源
      最近更新 更多