模板語言 自定義函數simple_tag

模板語言自帶的一些處理函數:經過管道符來處理html

幫助方法:
{{ item.event_start|date:"Y-m-d H:i:s"}}  轉換成日期時間型
{{ bio|truncatewords:"30" }} 只取前30個字符
{{ my_list|first|upper }} 將第一個字母大寫
{{ name|lower }} 全轉換小寫python

有時咱們需要自定義函數:  django

@register.simple_tag   session

a、在app中建立templatetags模塊app

b、建立任意 .py 文件,如:xx.pyide

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/usr/bin/env python
#coding:utf-8
from  django  import  template
from  django.utils.safestring  import  mark_safe
   
register  =  template.Library()
   
@register .simple_tag
def  my_simple_time(v1,v2,v3):
     return   v1  +  v2  +  v3
   
@register .simple_tag
def  my_input( id ,arg):
     result  =  "<input type='text' id='%s' class='%s' />"  % ( id ,arg,)
     return  mark_safe(result)

c、在使用自定義simple_tag的html文件中導入以前建立的 xx.py 文件名函數

1
{ %  load xx  % }

d、使用simple_tagspa

1
2
{ %  my_simple_time  1  2  3 % }
{ %  my_input  'id_username'  'hide' % }

e、在settings中配置當前app,否則django沒法找到自定義的simple_tag  code

1
2
3
4
5
6
7
8
9
INSTALLED_APPS  =  (
     'django.contrib.admin' ,
     'django.contrib.auth' ,
     'django.contrib.contenttypes' ,
     'django.contrib.sessions' ,
     'django.contrib.messages' ,
     'django.contrib.staticfiles' ,
     'app01' ,
)

 

@register.filterhtm

註冊filter跟tag步驟是同樣的,只是把@register.simple_tag換成@register.filter,而後調用時用管道符方式,變量|函數名:"參數"

比較:

			simple_tag
				a. app下建立templatetags目錄
				b. 任意xxoo.py文件
				c. 建立template對象 register
				d. 
					@register.simple_tag
					def func(a1,a2,a3....)
						return "asdfasd"
				e. settings中註冊APP
				f. 頂部 {% load xxoo %}
				g. {% 函數名 arg1 arg2 %}
				缺點:
					不能做爲if條件
				優勢:
					參數任意
			filter
				a. app下建立templatetags目錄
				b. 任意xxoo.py文件
				c. 建立template對象 register
				d. 
					@register.filter
					def func(a1,a2)
						return "asdfasd"
				e. settings中註冊APP
				f. 頂部 {% load xxoo %}
				g. {{ 參數1|函數名:"參數二,參數三" }} {{ 參數1|函數名:數字 }}
				缺點:
					最多兩個參數,不能加空格,非要多個參數得寫成一個字符串,本身切分
				優勢:
					能做爲if條件
相關文章
相關標籤/搜索