您好,登錄后才能下訂單哦!
我們已經知道了在Django的模板里面,可以使用for循環,if判斷,接收后臺的數據,還可以通過 extends和include來重復使用其他的模板,這一節來學習如何自定義函數。
模板里面有兩種方式來自定義函數,分別是simple_tag和 filter方式。
simple_tag:
1 首先在app下創建一個templatetags的目錄,然后在這個目錄下面創建一個py文件,注意這個目錄的名字是固定的
2. 然后在這個py文件里面,導入模板類,實例化一個對象register,然后執行一個裝飾器simple_tag, 裝飾器下面是自己的函數
請注意,除了自己寫的函數,其余所有這些參數的名字都是固定的!
__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. 和數據庫的操作一樣,需要在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. 在要使用的模板文件里面頂部導入我們寫的python文件, 就可以調用了。調用的時候空格距離無所謂
例如
{% load calculation %} <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title></title> </head> <body> <p> {% addnum 2 5 6 %} </p> </body> </html>
第二種定義函數的方式叫做filter,這個和Django自帶的函數使用方式非常類似。
首先看幾個自帶的例子
比如我可以直接傳入一個字符串,然后通過管道符號,后面跟一個字符串的函數讓他改變大小寫或者切片
<p> {{ name }} </p> <p> {{ name|upper }} </p> <p> {{ name|truncatechars:"10" }} </p>
如果希望使用類似的格式來調用自己的函數,我們可以使用filter
filter的步驟和simple_tag非常類似。 首先仍然是創建 templatetags目錄,然后創建一個py文件,然后實例化一個register對象。區別在于裝飾器不同了,這次是@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文件,調用的時候不是{% 函數名 參數1 參數2 參數3%} 的格式 而是 {{ 參數1 | 函數名:"參數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>
結果如下
那么,除了格式的區別,simple_tag和filter還有什么區別呢?
simple_tag可以使用任何個數的參數,而filter只能最多2個參數
simple_tag不能作為if條件,而filter可以
simple_tag后面的參數直接的空格隨意, filter不能有空格
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。