天天看點

python測試開發django-181.自定義過濾器(除法取餘)

前言

使用 django 模闆jinja2 寫 html, 需對變量的取值做加減乘除運作,得到的結果再去判斷是否為真。

這種比較複雜的邏輯運作,可以通過自定義過濾器來實作。

遇到問題

視圖函數傳回的資料

context = {"titles": ["宇宙知識",
                      "百科知識",
                      "科學世界",
                      "生物世界",
                      "海洋世界",
                      "唯美地球",
                      "恐龍世界"]}
           

模闆裡面周遊取值

<h3>分類标題</h3>
{% for title in titles %}
    {{ title }} |
{% endfor %}

           

得到的結果

python測試開發django-181.自定義過濾器(除法取餘)

我們期望每3個title顯示一行,多餘的換行顯示。

過濾器filter

在app下建立templatetags目錄,

python測試開發django-181.自定義過濾器(除法取餘)

寫一個過濾器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 %}
           

顯示效果

python測試開發django-181.自定義過濾器(除法取餘)

再加個判斷,最後一個不顯示

|

{%  load myfilter %}
<h3>分類标題</h3>
{% for title in titles %}

    {% if forloop.counter|quyu:3 == 0 %}
        {{ title }} <br>
    {% elif forloop.last %}
        {{ title }}
    {% else %}
        {{ title }} |
    {% endif %}
{% endfor %}
           
python測試開發django-181.自定義過濾器(除法取餘)

關于forloop變量的使用

  • forloop 是for循環的内容變量
  • forloop.counter 是得到目前是第幾次循環,從1開始
  • forloop.counter0 是得到目前是第幾次循環,從0開始
  • forloop.first 是否是第一次循環,傳回布爾值
  • forloop.last 是否是最後一次循環,傳回布爾值