我們已經(jīng)知道了在Django的模板里面,可以使用for循環(huán),if判斷,接收后臺的數(shù)據(jù),還可以通過 extends和include來重復(fù)使用其他的模板,這一節(jié)來學(xué)習(xí)如何自定義函數(shù)。
創(chuàng)新互聯(lián):自2013年起為各行業(yè)開拓出企業(yè)自己的“網(wǎng)站建設(shè)”服務(wù),為超過千家公司企業(yè)提供了專業(yè)的成都做網(wǎng)站、成都網(wǎng)站制作、網(wǎng)頁設(shè)計和網(wǎng)站推廣服務(wù), 按需開發(fā)網(wǎng)站由設(shè)計師親自精心設(shè)計,設(shè)計的效果完全按照客戶的要求,并適當?shù)奶岢龊侠淼慕ㄗh,擁有的視覺效果,策劃師分析客戶的同行競爭對手,根據(jù)客戶的實際情況給出合理的網(wǎng)站構(gòu)架,制作客戶同行業(yè)具有領(lǐng)先地位的。模板里面有兩種方式來自定義函數(shù),分別是simple_tag和 filter方式。
simple_tag:
1 首先在app下創(chuàng)建一個templatetags的目錄,然后在這個目錄下面創(chuàng)建一個py文件,注意這個目錄的名字是固定的
2. 然后在這個py文件里面,導(dǎo)入模板類,實例化一個對象register,然后執(zhí)行一個裝飾器simple_tag, 裝飾器下面是自己的函數(shù)
請注意,除了自己寫的函數(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ù)庫的操作一樣,需要在settings.py里面注冊這個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)入我們寫的python文件, 就可以調(diào)用了。調(diào)用的時候空格距離無所謂
例如
{% load calculation %}{% addnum 2 5 6 %}
第二種定義函數(shù)的方式叫做filter,這個和Django自帶的函數(shù)使用方式非常類似。
首先看幾個自帶的例子
比如我可以直接傳入一個字符串,然后通過管道符號,后面跟一個字符串的函數(shù)讓他改變大小寫或者切片
{{ name }}
{{ name|upper }}
{{ name|truncatechars:"10" }}
如果希望使用類似的格式來調(diào)用自己的函數(shù),我們可以使用filter
filter的步驟和simple_tag非常類似。 首先仍然是創(chuàng)建 templatetags目錄,然后創(chuàng)建一個py文件,然后實例化一個register對象。區(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
接下來步驟一樣,需要在settings.py里面注冊app,然后模板文件load這個py文件,調(diào)用的時候不是{% 函數(shù)名 參數(shù)1 參數(shù)2 參數(shù)3%} 的格式 而是 {{ 參數(shù)1 | 函數(shù)名:"參數(shù)2"}}
{% load calculation %}{% addnum 2 5 6 %}
{{ name }}
{{ name|upper }}
{{ name|truncatechars:"10" }}
{{ 30|mulnum:30 }}
結(jié)果如下
那么,除了格式的區(qū)別,simple_tag和filter還有什么區(qū)別呢?
simple_tag可以使用任何個數(shù)的參數(shù),而filter只能最多2個參數(shù)
simple_tag不能作為if條件,而filter可以
simple_tag后面的參數(shù)直接的空格隨意, filter不能有空格
創(chuàng)新互聯(lián)www.cdcxhl.cn,專業(yè)提供香港、美國云服務(wù)器,動態(tài)BGP最優(yōu)骨干路由自動選擇,持續(xù)穩(wěn)定高效的網(wǎng)絡(luò)助力業(yè)務(wù)部署。公司持有工信部辦法的idc、isp許可證, 機房獨有T級流量清洗系統(tǒng)配攻擊溯源,準確進行流量調(diào)度,確保服務(wù)器高可用性。佳節(jié)活動現(xiàn)已開啟,新人活動云服務(wù)器買多久送多久。