【问题标题】:Iterating lists in django template在 Django 模板中迭代列表
【发布时间】:2019-03-05 19:14:34
【问题描述】:

我有不同的列表

context = {
    'query' : request.POST['query'],
    'link' : link,
    'description' : description,
    'title' : title,
    'thumbnail' : thumb,
    'range' : range(len(title)),
}

我想遍历它们,例如:

for i in range(20):
    link[i]
    title[i]

在 django 模板中。我该怎么做?

【问题讨论】:

  • 这里的linktitle 是什么?

标签: django python-3.x list for-loop


【解决方案1】:

您最好在视图中创建那些链接-标题对,以便您可以使用完整的 Python 库(例如 zip):

context = {
    'link' : link,
    'title' : title,
    'link_title': list(zip(link, title)),
    # ...
}

如有必要,您可以在模板中分割该便利列表:

{% for l, t in link_title|slice:":20" %}
    # do stuff with l, t
{% endfor %}

【讨论】:

    【解决方案2】:

    您通常不会在视图中使用 zip 构造,然后同时迭代两个(或更多)迭代器:

    context = {
        'query' : request.POST['query'],
        'linktitle' : zip(link, title),
        'description' : description,
        'thumbnail' : thumb,
        'range' : range(len(title)),
    }

    然后在模板中:

    {% for linki, titlei in linktitle %}
       {{ linki }} / {{ titlei }}
    {% endfor %}

    如果只对前 20 个元素感兴趣,可以在 zip 中添加range(20),或者使用islice

    from itertools import islice
    
    context = {
        'query' : request.POST['query'],
        'linktitle' : islice(zip(link, title), 20),
        'description' : description,
        'thumbnail' : thumb,
        'range' : range(len(title)),
    }

    【讨论】:

      猜你喜欢
      • 2021-10-28
      • 1970-01-01
      • 2014-08-19
      • 1970-01-01
      • 1970-01-01
      • 2015-10-16
      • 2020-08-01
      • 2014-05-14
      • 1970-01-01
      相关资源
      最近更新 更多