django - 如何通过模板for循环将计数器添加到{{}}标记中

时间:2016-04-19 11:31:57

标签: for-loop django-templates

views.py:

def main(request):
    users = PUser.objects.filter(ostan=os, shahr=sh, content_id=content)
    return render(request, 'main.html', {'users': users})

在main.html文件中:

<a href="#">{{ users.0.website }}</a>
.
.
.
<a href="#">{{ users.1.website }}</a>
.
.
.
<a href="#">{{ users.2.website }}</a>
.
.
.
<a href="#">{{ users.3.website }}</a>

现在我想把它通过一个for循环。所以我添加了这一行:

numbers = [1, 2, 3, 4]

到views.py,并编辑了这样的main.html:

{% for each in numbers %}
    <a href="#">{{ users.0.website }}</a>
{% enfor %}

但我不知道如何编辑{{ users.0.website }}部分!

我试过{{ users.each.website }}但它没有打印任何内容。我该怎么改变它?

1 个答案:

答案 0 :(得分:1)

{{ users.each.website }}所做的是搜索名为"each"的变量中存储的stringdict类型的密钥users。因此,它不是名为each的变量中的值,该变量用于查找名为dict的{​​{1}}中的值,但原始值users。< / p>

不幸的是,Django的模板语言中没有内置的过滤器可以做你想要的,但你可以自己实现一个模板过滤器。查看this question的答案。

除此之外:您是否记得在模板中提供变量"each"

numbers

...因为否则循环根本不会被执行,因为模板内的def main(request): // ... return render(request, 'main.html', {'users': users, 'numbers': numbers}) numbers。对于您的特殊用例,您可能只需迭代集合本身:

None

要仅显示有限数量的条目,您可以使用forloop.counter而不是引入单独的数字列表:

{% for user in users %}
    <a href="#">{{ user.website }}</a>
{% enfor %}