python的Web框架,Django自定義過濾器及標籤

代碼佈局

有的時候框架給的過濾器不夠用,須要自定義一些過濾器,因此就須要咱們本身來定義一些過濾器等html

自定義代碼放置的路徑

某個app特用(獨有)的 - app 目錄下的 templatetags文件夾內(文件夾內須要有__init__.py文件)python

公用的 - 再建立一個新的app,而後在新的app中建立templatetags(固定的單詞寫法)文件夾,可是須要在setting文件中的INSTALL_APPS中註冊,而後就能夠應用了django

 


自定義模板過濾器

定義過濾器

在templatetags的文件夾下建立py文件(通常是叫customer_filters),過濾器寫在文件內:app

模板過濾器是一個函數,有一個或者兩個參數框架

- 第一個參數,是傳遞進來的模板變量 - 第二個參數,是普通的參數,也能夠是默認的,也能夠不要
1 過濾器範式: 2     def func(value,arg='zh'): 3         map ={ 4             'zh':('',''), 5             'en':('female','male') 6  } 7         return map[arg][value] 8 
9     實現須要返回的值

 

註冊

經過 django.template.Library 它的實例的filter 方法函數

1  filter 有兩個參數: 2         - name:過濾器的名稱,是個字符串,能夠不寫,默認使用方法名(函數名)做爲過濾器的名稱 3         - filter_func 定義的過濾器的函數 4 
5     #導包
6     from django.template import Library 7     
8     #生成實例
9     register = Library()

 

第一種方法:佈局

1     def func(): 2         return '我是一個例子'
3     
4     #把函數丟進來。即註冊成功,能夠簡寫成register.filter(func)
5     register.filter('funcname',func) 6     #第一個參數表示調用的name,第二個參數表示函數名

 

第二種方法:經過裝飾器方法來註冊spa

1     #name這個參數能夠不寫,默認調用函數名
2     @register.filter(name=funcname) 3     def func() 4         return '我是一個例子'

 

模板中使用
  • 第一步,須要先load一下,經過python模板名,在網頁中load在templatetags文件夾下的這個過濾器函數的py文件 須要查看下settings.py文件中的INSTALLED_APPS 是否有註冊,如沒有就須要註冊。
1     {% load customer_filters %}

 


自定義模板標籤

  • 簡單標籤: django.template.Library.simple_tag()
定義簡單標籤 simple_tag

在templatetags的文件夾下建立py文件(通常是叫customer_tags)3d

 1 簡單標籤範式:顯示當前時間的標籤  2     from datetime import datetime  3     
 4     #註冊方法
 5     from django.template import Library  6     register = Library()  7     
 8     #當前時間的函數標籤
 9     def current_time(format): 10     return datetime.now().strftime(format)

 

註冊的第一種方式:code

1     #註冊簡單標籤:第一種方式註冊
2     register.simple_tag(current_time, name='current')

 

註冊的第二種方式:

1     #註冊簡單標籤:第二種方式註冊,裝飾器方式的寫法,寫在函數上便可
2     @register.simple_tag(name='current')

 

在html中使用
1 #load下templatetags的文件夾下建立的標籤函數的py文件名
2 {% load customer_tags%}
 
1 #應用簡單標籤,名字和參數用空格隔開便可,後面是參數
2 {% current '%Y-%m-%d %H:%M:%S %}

 

 

引用上下文變量,此處簡單標籤的參數,也可使用成views中render傳遞到模板中的context裏面的數據。 須要在simple_tag中,設置參數take_context=True

1 標籤函數的文件中,註冊的時候添加takes_context參數 2     @register.simple_tag(name='current',takes_context=True) 3     
4  在定義函數的時候,第一個參數必須且必定是context; 5     def current_time(context,format_str):

 


inclusion

包含標籤 inclusion

-包含標籤,經過渲染另一個html模板來展現數據 django.template.Library.inclusion_tag()

須要建立一個html模板文件,能夠建立在templates文件夾下的同級html文件中,也能夠在其下面建立一個新的文件夾來存放html模板。

1 渲染的html模板 2 <ul>
3     <!--這裏的ls對應的下面函數返回標籤內的key-->
4     {% for i in ls %} 5         <li>{{ i }}</li>
6     {% endfor %} 7 </ul>

 

內容寫在簡單標籤customer_tags的文件中

1     #註冊方法
2     from django.template import Library 3     register = Library() 4 
5     #註冊,並把須要渲染的模板丟進來,
6     @register.inclusion_tag('teacher/show_list_as_ul.html') 7     
8     def show_list_as_ur(value): 9         return {'ls':value}

 

在html中使用
1 #load在templatetags的文件夾下建立的標籤函數的py文件名
2 {% load customer_tags%} 3 
4 #應用簡單標籤,名字和參數用空格隔開便可,後面是參數
5 {% show_list_as_ul stu.course %}

 

例子: 本來的課程展示方式 

 

經過包含標籤渲染後: 根據自定義的方式展示出來。 

 

帶參數的包含標籤 inclusion:

標籤函數

1     from django.template import Library 2     register = Library() 3     
4     @register.inclusion_tag('teacher/show_list_as_ul.html') 5     def show_list_as_ur(value, style): 6         return {'ls':value,'style':style}

html模板語法:

 1 函數內的參數在此處的對應  2 {% if style == 'button' %}  3     <div class="list-gtoup">
 4     {% for i in ls %}  5         <button type="button" class="list-group-item">{{ i }}<button>
 6     {% endfor %
 7     </div>
 8 {% endif %}  9     
10 #還能夠寫上elif和else
11 {% endif %}

 

html中的用法

標籤函數+空格+數據+空格+標籤中的參數 <td>{% show_list_as_ul stu.course ''%}</td> 

渲染以後的效果: 

 

原文出處:https://www.cnblogs.com/hua888/p/10432756.html

相關文章
相關標籤/搜索