Par*_*ngh 5 python django django-templates
我想在给定条件下减少django模板中forloop.counter的值,这是否可能在django中进行。
下面是演示的例子
{% for i in item %}
{% if forloop.counter0|divisibleby:4 %}
Start
{% endif %}
{% if i %}
item{{ forloop.counter }}
{% else %}
######### Here I want to reduce value of forloop.counter by 1 ###########
{% endif %}
{% if forloop.counter|divisibleby:4 %}
End
{% endif %}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,8个完美项目的输出将是
Start
item1
item2
item3
item4
End
Start
item5
item6
item7
item8
End
Run Code Online (Sandbox Code Playgroud)
但假设item2为None,则输出为
Start
item1
item3
item4
End
Start
item5
item6
item7
item8
End
Run Code Online (Sandbox Code Playgroud)
我希望通过不满足条件的情况下每次减小forloop的值来以适当的升序形式打印(每步增加1)。请不要提出有关自定义模板标签的建议,我知道这一点,我认为它是最后的选择。
我真的怀疑 django 会让你轻易地搞乱forloop.counter它,而且无论如何也不会搞乱它。显而易见的解决方案是在迭代列表之前过滤掉列表,这可以在您的视图中完成,或者(如果您坚持在模板中执行)使用自定义过滤器。
或者,您可以将列表包装在生成器函数中,该函数将负责过滤和编号,即:
def filteriternum(seq):
num = 0
for item in seq:
if not item:
continue
num += 1
yield num, item
Run Code Online (Sandbox Code Playgroud)
同样,您可以在视图中进行包装,也可以编写将进行包装的标签的自定义模板过滤器。
| 归档时间: |
|
| 查看次数: |
6897 次 |
| 最近记录: |