18)django-模板的過濾器和tag,自定義simple_tag和filter
阿新 • • 發佈:2017-11-05
hello 直接 結果 from simple 使用 span 裝飾 san 二:模板標簽(template tag)
模板過濾器是在變量被顯示前修改它的值的一個簡單方法。 過濾器使用管道字符 .
模板標簽(template tag) 。標簽(tag)定義比較明確,即: 僅通知模板系統完成某些工作的標簽。
一:django自帶過濾器
{{ name|lower }} 顯示的內容是變量 {{ name }} 被過濾器 lower 處理後的結果,它功能是轉換文本為小寫
{{ my_list|first|upper }} {{ bio|truncatewords:"30" }} addslashes : 添加反斜杠到任何反斜杠、單引號或者雙引號前面。 這在處理包含JavaScript的文本時是非常有用的。 date : 按指定的格式字符串參數格式化 date 或者 datetime 對象, 範例: {{ pub_date|date:"F j, Y" }} length : 返回變量的長度。 對於列表,這個參數將返回列表元素的個數。 對於字符串,這個參數將返回字 符串中字符的個數。 你可以對列表或者字符串,或者任何知道怎麽測定長度的Python 對象使用這個方法 (也就是說,有 __len__() 方法的對象)。
二:模板標簽(template tag)
標簽(tag):定義比較明確,即: 僅通知模板系統完成某些工作的標簽 ,比如
for標簽
if 標簽
三:自定義simple_tag
如果django自帶的過濾器和tag不滿足需求,可以自己定義simple_tag和filter來使用
把ptyhon某些函數直接那到模板語言使用,就模板的simple_tag
建立步驟如下:
步驟1) 在某個app下面創建templatetags目錄 步驟2)在templatetags下面創建任意xx.py文件 步驟3)創建template對象register, from django import template from django.utils.safestring import mark_safe register = template.Library() @register.simple_tagdef my_simple_time(v1,v2,v3): return v1 + v2 + v3 步驟4)裝飾自定義文件 步驟5)setings裏面註冊app 步驟6)在模板裏頂部{% load xx%} 步驟7)使用{% 函數名 參數%} 優點:參數任意 缺點:不能做為if條件
四:自定義filter(過濾器)
模板自定義filter 步驟1) 在某個app下面創建templatetags目錄 步驟2)在templatetags下面創建任意xx.py文件 步驟3)創建template對象register, from django import template from django.utils.safestring import mark_safe register = template.Library() @register.filter def hello(v1,v2): return v1 + v2 步驟4)裝飾自定義文件 步驟5)setings裏面註冊app 步驟6)在模板裏頂部{% load xx%} 步驟7)使用{{ 參數1|函數名:參數2}} 最多傳遞兩個參數 {{ "word"|hello:"china" }} 最多傳遞兩個參數,如果要傳遞多個參數,可以這樣寫 {{ 參數1|函數名:“參數2,參數2”}} 在函數裏split切割 缺點:參數最多兩個,不能加空格 優點:能作為if條件
五:示例
app01.templatetags
xx.py
# -*- coding:utf-8 -*- __author__ = ‘shisanjun‘ from django import template register=template.Library() @register.simple_tag def add(n,m): #自定義simple_tag,可以傳遞多個參數 return n+m @register.filter def hello(n,m): #自定義filter,只能傳遞兩個參數 return n+m
模板調用
{% load xx %} <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <p>simple_tag演示</p> {% add 2 3 %} <p>filter演示,filter最多傳遞兩個參數</p> {{ "word"|hello:"china" }} <p>simple_tag不能使用if判斷,filter可以用於if判斷測試條件</p> {%if "word"|hello:"china" %} {% endif %} </body> </html>
18)django-模板的過濾器和tag,自定義simple_tag和filter