您好,登錄后才能下訂單哦!
我們已經(jīng)知道了在Django的模板里面,可以使用for循環(huán),if判斷,接收后臺(tái)的數(shù)據(jù),還可以通過(guò) extends和include來(lái)重復(fù)使用其他的模板,這一節(jié)來(lái)學(xué)習(xí)如何自定義函數(shù)。
模板里面有兩種方式來(lái)自定義函數(shù),分別是simple_tag和 filter方式。
simple_tag:
1 首先在app下創(chuàng)建一個(gè)templatetags的目錄,然后在這個(gè)目錄下面創(chuàng)建一個(gè)py文件,注意這個(gè)目錄的名字是固定的
2. 然后在這個(gè)py文件里面,導(dǎo)入模板類(lèi),實(shí)例化一個(gè)對(duì)象register,然后執(zhí)行一個(gè)裝飾器simple_tag, 裝飾器下面是自己的函數(shù)
請(qǐng)注意,除了自己寫(xiě)的函數(shù),其余所有這些參數(shù)的名字都是固定的!
__author__ = 'Administrator' from django import template from django.utils.safestring import mark_safe register = template.Library() @register.simple_tag def addnum(a1,a2,a3): return a1+a2+a3
3. 和數(shù)據(jù)庫(kù)的操作一樣,需要在settings.py里面注冊(cè)這個(gè)app
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'app01', ]
4. 在要使用的模板文件里面頂部導(dǎo)入我們寫(xiě)的python文件, 就可以調(diào)用了。調(diào)用的時(shí)候空格距離無(wú)所謂
例如
{% load calculation %} <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title></title> </head> <body> <p> {% addnum 2 5 6 %} </p> </body> </html>
第二種定義函數(shù)的方式叫做filter,這個(gè)和Django自帶的函數(shù)使用方式非常類(lèi)似。
首先看幾個(gè)自帶的例子
比如我可以直接傳入一個(gè)字符串,然后通過(guò)管道符號(hào),后面跟一個(gè)字符串的函數(shù)讓他改變大小寫(xiě)或者切片
<p> {{ name }} </p> <p> {{ name|upper }} </p> <p> {{ name|truncatechars:"10" }} </p>
如果希望使用類(lèi)似的格式來(lái)調(diào)用自己的函數(shù),我們可以使用filter
filter的步驟和simple_tag非常類(lèi)似。 首先仍然是創(chuàng)建 templatetags目錄,然后創(chuàng)建一個(gè)py文件,然后實(shí)例化一個(gè)register對(duì)象。區(qū)別在于裝飾器不同了,這次是@register.filter
比如
__author__ = 'Administrator' from django import template from django.utils.safestring import mark_safe register = template.Library() @register.simple_tag def addnum(a1,a2,a3): return a1+a2+a3 @register.filter def mulnum(a1,a2): return a1*a2
接下來(lái)步驟一樣,需要在settings.py里面注冊(cè)app,然后模板文件load這個(gè)py文件,調(diào)用的時(shí)候不是{% 函數(shù)名 參數(shù)1 參數(shù)2 參數(shù)3%} 的格式 而是 {{ 參數(shù)1 | 函數(shù)名:"參數(shù)2"}}
{% load calculation %} <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title></title> </head> <body> <p> {% addnum 2 5 6 %} </p> <p> {{ name }} </p> <p> {{ name|upper }} </p> <p> {{ name|truncatechars:"10" }} </p> {{ 30|mulnum:30 }} </body> </html>
結(jié)果如下
那么,除了格式的區(qū)別,simple_tag和filter還有什么區(qū)別呢?
simple_tag可以使用任何個(gè)數(shù)的參數(shù),而filter只能最多2個(gè)參數(shù)
simple_tag不能作為if條件,而filter可以
simple_tag后面的參數(shù)直接的空格隨意, filter不能有空格
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。