Django框架基础知识05-自定义模板标签与过滤器
?
根據一定規則,自己定義出符合需求功能的.用在任何你有需求的地方,因為內置的滿足不了我們的需求,不同的東西有不同的定義規則
目前最最重要的就是HOW
一 文件路徑配置:
templates
存放自定義
某個app特有的自定義標簽:存放模板的目錄:在app目錄下創建一個python package,在其中新建templatetags標簽及過濾器的目錄
目錄結構:
?
注意:templatetags這個目錄名字是固定的,而里面的模塊名是自定義的.
模板過濾器的分析:
{{ var|foo:"bar" }} 變量,過濾器,參數
自定義過濾器就是一個帶有一個或兩個參數的Python 函數:
- (輸入的)變量的值 —— 不一定是字符串形式。
- 參數的值 —— 可以有一個初始值,或者完全不要這個參數。
自定義過濾器的例子:
?
?
def to_male(value,arg): #自定義返回判斷函數,用字典實現的例子? map = {
? ? ? 'zh':('女','男'),
? ? ? 'en':('female','male')
? }
? return map[arg][value]
掌握自定義的規則!!!
注冊自定義過濾器:
django.template.Library.filter()
1.Library.filter()方法需要兩個參數:
a. name:過濾器的名稱(一個字符串對象)
b. filter_func:編譯的函數 – 一個Python函數(不要把函數名寫成字符串)
2.可以把register.filter()用作裝飾器;在register.filter(name=''),可以放參數.
3.沒有聲明 name 參數,Django將使用函數名作為過濾器的名字。
?
使用自定義過濾器:
在模板中使用自定義的過濾器
需要使用{% load %}標簽將我們的自定義模塊加載進來
{% load %} 聲明將會載入給定模塊名中的標簽/過濾器
?
自定義標簽:
簡單標簽django.template.Library.simple_tag()
包含標簽django.template.Library.inclusion_tag()
tag()方法有兩個參數:
模板標記的名稱 - 字符串。 如果省略,將使用編譯函數的名稱。
編譯的函數 – 一個Python函數(不要把函數名寫成字符串)
與過濾器注冊一樣,也可以將其用作裝飾器。
自定義簡單標簽的例子:
?
代碼布局(自定義的代碼,放在哪里)
?
-app目錄下,templatetags文件夾.
?
在simple_tags的參數中設置takes_context=True,就能得到views中的context傳參.在自定義標簽中的參數第一個一定要寫context.例:
def func(context,format_str):
...
包含標簽,通過渲染另外一個模板
自定義包含標簽的例子:
?
例子:
?
<td>{% show_list_as_ul stu.course 'link' %}</td>裝飾器中傳入的是我們顯示數據的模板文件路徑
context中以下劃線開頭的健,屬性,方法用點號在模板中拿不到
例:arg = {
'_meta' = 'adafdakfl'
}
{{arg._meta}}取不到
想要取值就先把arg傳到變量中,在變量里取出_meta,再用這個新變量取值.
函數返回的是個字典對象.
代碼布局(自定義的代碼,放在哪里)
某個app特有的 -app 目錄下,templatetags 文件夾 -再到 templatetags 文件夾下創建python模塊(py文件)
定義復用 -創建一個新的app,將他們定義在新的app中,在INSTALL_APPS 注冊,然后就可以應用
1.自定義模板過濾器 -模板過濾器是什么 -函數,一個或兩個參數 - 第一個參數,是傳遞進來的模板變量 - 第二個參數,普通的參數,也可以是默認,也可以不要 其實就是個函數,沒有什么不同 - 定義非常簡單,就是寫一個函數
-注冊1.
通過django.template.Library 它的實例的 filter 方法
filter 有兩個參數:
- name 過濾器的名稱,是個字符串,可以不寫,默認
使用方法名作為過濾器的名稱
- filter_func 定義的過濾器的函數
2.通過裝飾器
-模板中使用
- 先要load一下,通過python模塊名
2.自定義模板標簽 - 簡單標簽 django.template.Library.simple_tag() - 創建 普通的python函數 - 注冊 1. 2.裝飾器 - 引用上下文變量(views中render傳遞到模板中的那個context) 只需要在simple_tag 中,設置參數take_context=True 自定義的標簽函數的第一個參數一定是 context
- 包含標簽? ?
轉載于:https://www.cnblogs.com/winfun/p/10966512.html
總結
以上是生活随笔為你收集整理的Django框架基础知识05-自定义模板标签与过滤器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据段、代码段、堆栈段、BSS段的区别
- 下一篇: mkdir: cannot create