是否可以在模板上多次显示相同的查询集?

时间:2017-07-05 13:00:57

标签: django django-templates

这是一个奇怪的问题,但我希望能够使用不同的{% for loops %}在我的模板上多次显示相同的查询集,我正在尝试避免复制粘贴每个{% for loops %}。< / p>

假设我的 views.py 像这样:

...
    chicken = Chicken.objects.filter(id=1)
    return render(request, 'chicken.html', {'chicken':chicken}

chicken.html:以下示例是我要避免的。

<!-- {{ egg }} has the same value everywhere --> 

{% for egg in chicken %} <!-- has a different index than other loops -->
    <p id="egg_1">{{egg}}</p> 
{% endfor %}

{% for egg in chicken %}
    <p id="egg_2">{{egg}}</p>
{% endfor %}

{% for egg in chicken %}
    <p id="egg_3">{{egg}}</p>
{% endfor %}

...x52...

有没有办法在每个循环上使用不同的索引时自动进行此操作?

我正在寻找类似的东西:

{% for chicken x52 %}
    {% for egg in chicken %}
        <p id="egg_index">{{egg}}</p> <!-- each with different index -->
    {% endfor %}
{% endfor %}

1 个答案:

答案 0 :(得分:2)

对于您提供的示例,您可以在上下文中添加变量loops

chicken = Chicken.objects.filter(id=1)
loops = range(1, 53)
return render(request, 'chicken.html', {'chicken':chicken, 'loops': loops}

然后在模板中循环loops

{% for loop in loops %}
  {% for egg in chicken %} <!-- has a different index than other loops -->
    <p id="egg_{{ loop }}">{{egg}}</p> 
  {% endfor %}
{% endfor %}

如果您不想在上下文中添加变量,this question上会建议一些不同的方法,有些方法比其他方法更为粗糙。