天天看點

Django自定義模闆過濾器及标簽1.自定義模闆過濾器2.自定義模闆标簽

1.自定義模闆過濾器

代碼布局

a. app目錄下的名為 templatetags 的檔案夾,名字是規定好的.這個檔案夾必須是一個Python的包,這個檔案下一定有一個__init__.py的檔案

b.自定義的模闆标簽,或模闆過濾器就放在這個包下的python子產品中(python的腳本檔案)

c.app必須在settings中被注冊

Django自定義模闆過濾器及标簽1.自定義模闆過濾器2.自定義模闆标簽

定義和布局

a.自定義過濾器就是一個python函數,它有一個或兩個參數.

b.第二個參數 是一個普通參數,可以是預設參數,也可以不要這個參數

第一個模闆過濾器

Django自定義模闆過濾器及标簽1.自定義模闆過濾器2.自定義模闆标簽

注冊

from django.template import Library

register = Library()  # 必須用register這個變量名


def my_male(value):
    """
    轉換性别的過濾器
    :param value:
    :return:
    """
    map = {
        '0': '女',
        '1': '男'
    }

    return map[value]

# 注冊
register.filter(my_male)
           

在模闆中使用

load标簽,引入自定義的過濾器子產品,也就是templatetags包裡的那個python檔案

{% load teacher_filters %}

......

<td>{{ student.sex|my_male }}</td>

注意: 建立了templatetags檔案夾要重新開機一下Django服務

Django自定義模闆過濾器及标簽1.自定義模闆過濾器2.自定義模闆标簽

效果圖

Django自定義模闆過濾器及标簽1.自定義模闆過濾器2.自定義模闆标簽

2.自定義模闆标簽

标簽類型

1.簡單标簽

django.template.Libray.simple_tag()

接受許多參數

a.建立和注冊

Django自定義模闆過濾器及标簽1.自定義模闆過濾器2.自定義模闆标簽

在模闆引用

Django自定義模闆過濾器及标簽1.自定義模闆過濾器2.自定義模闆标簽

效果圖

Django自定義模闆過濾器及标簽1.自定義模闆過濾器2.自定義模闆标簽

模闆标簽就是一個函數

<p>目前時間: {% current %}</p> # 跟普通函數的傳參一樣, 字元串, 模闆變量, 關鍵字傳參      
<p>目前時間: {% current format_str %}</p> # 這裡的format_str是一個模闆變量      
<p>目前時間: {% current format_str='%Y-%m-%d' %}      
<p>目前時間: {% current '%Y-%m-%d' %}</p>      
一樣可以出現效果

b.使用上下文管理

在自定義标簽中,使用目前模闆中的上下文變量context

Django自定義模闆過濾器及标簽1.自定義模闆過濾器2.自定義模闆标簽

2.包含标簽

通過渲染另外一個模闆來展示資料.

a.定義

# 導入子產品
from django.template.loader import get_template      
# 注冊
@register.inclusion_tag('teacher/show_list.html')
def show_list(list_data):
    # 是一個嵌套抱歉,首先展示清單資料
    return {'ls': list_data}

# 注冊
# t = get_template('teacher/show_list.html') ==(等同與)  @register.inclusion_tag('teacher/show_list.html')
# register.inclusion_tag(t)(show_list) # 需要一個模闆變量         
Django自定義模闆過濾器及标簽1.自定義模闆過濾器2.自定義模闆标簽
Django自定義模闆過濾器及标簽1.自定義模闆過濾器2.自定義模闆标簽

效果圖

Django自定義模闆過濾器及标簽1.自定義模闆過濾器2.自定義模闆标簽