前言
使用 django 模闆jinja2 寫 html, 需對變量的取值做加減乘除運作,得到的結果再去判斷是否為真。
這種比較複雜的邏輯運作,可以通過自定義過濾器來實作。
遇到問題
視圖函數傳回的資料
context = {"titles": ["宇宙知識",
"百科知識",
"科學世界",
"生物世界",
"海洋世界",
"唯美地球",
"恐龍世界"]}
模闆裡面周遊取值
<h3>分類标題</h3>
{% for title in titles %}
{{ title }} |
{% endfor %}
得到的結果

我們期望每3個title顯示一行,多餘的換行顯示。
過濾器filter
在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變量的使用
- forloop 是for循環的内容變量
- forloop.counter 是得到目前是第幾次循環,從1開始
- forloop.counter0 是得到目前是第幾次循環,從0開始
- forloop.first 是否是第一次循環,傳回布爾值
- forloop.last 是否是最後一次循環,傳回布爾值