使用 django 模板jinja2 写 html, 需对变量的取值做加减乘除运行,得到的结果再去判断是否为真。 这种比较复杂的逻辑运行,可以通过自定义过滤器来实现。
视图函数返回的数据
context = {"titles": ["宇宙知识",
"百科知识",
"科学世界",
"生物世界",
"海洋世界",
"唯美地球",
"恐龙世界"]}
模板里面遍历取值
<h3>分类标题</h3>
{% for title in titles %}
{{ title }} |
{% endfor %}
得到的结果
我们期望每3个title显示一行,多余的换行显示。
在app下新建templatetags目录,
写一个过滤器myfilter.py
from django import template
register = template.Library()
@register.filter(name='quyu')
def myquyu(value, arg):
"""除法取余,得到余数"""
return int(value) % int(arg)
在模板中引用过滤器,必须先加载{% load myfilter %}
<h3>分类标题</h3>
{% for title in titles %}
{% if forloop.counter|quyu:3 == 0 %}
{{ title }} <br>
{% else %}
{{ title }} |
{% endif %}
{% endfor %}
显示效果
再加个判断,最后一个不显示 |
{% load myfilter %}
<h3>分类标题</h3>
{% for title in titles %}
{% if forloop.counter|quyu:3 == 0 %}
{{ title }} <br>
{% elif forloop.last %}
{{ title }}
{% else %}
{{ title }} |
{% endif %}
{% endfor %}
显示效果
关于forloop变量的使用