Python學習筆記-Day61和Day62-Django模板系統
主要內容:
一、模板語言-變數
二、模板語言-過濾器
三、模板語言Tags
四、csrf-token
五、母板
六、元件
七、靜態檔案相關
八、自定義tag
一、Django模板語言-變數
1、語法:{{ 變數名 }}
2、命名規則:所有的數字、字母、下劃線的自由組合
3、點(.)的作用
① 字典查詢 {{ dic.key }}
② 屬性、方法查詢 {{ obj.name }}
③ 索引查詢 {{ list1.0 }}
二、Django模板語言-過濾器filter
過濾器的作用是改變變數的顯示
1、語法:{{ 變數|filter_name:'引數' }}
① 過濾器支援鏈式操作,一個過濾器的輸出可以作為另一個過濾器的輸入
② 過濾器可以要接收引數
③ 過濾器中的引數是空格的話要用引號包起來
④ 管道符|左右兩邊沒有空格
2、Django中提供的內建的過濾器大概有60多中,列舉以下幾種
① default
如果一個變數是false或空,就設定成預設的值
{{ value|default:"nothing" }}
② length
返回變數的長度,作用於字串和列表
{{ value|length }}
③ filesizeformat
將值格式化成一個“人類可讀”的檔案尺寸
{{ value|filesizeformat }}
如果value的值是123456789,輸出的將是117.7MB
④ slice
切片,和python中的切片是一樣的,顧頭不顧尾
{{ value|slice:"1:-1"}}
⑤ date ******
格式化時間
將一個datetime格式的時間格式化成我們想要的格式
{{ now|date:"Y-m-d H:i:s"}}
⑥ safe
為了安全,Django的模板中會對HTML標籤和JS等語法標籤自動轉義成普通的字串。
但有時,我們不需要這些字串被轉義,就可以通過safe過濾器告訴Django這段程式碼是安全的不需要轉義
value = ‘<a href="#">點我</a>’
{{ value|safe }}
⑦ truncatechars
如果字串中的字元多於指定的數量,那麼會被截斷,截斷的字元將以可翻譯的省略號序列(...)結尾,每個省略號代表一個字元
{{ value|truncatechars:9}} # 包括三個省略號在內,保留9個字元
⑧ truncatewords
按照空格進行截斷,因為中文不以空格作為單詞的分割,所以這個過濾器對中文沒有什麼用處
被截斷的部分會以省略號(...)結尾
⑨ cut
移除掉指定的字元
{{ value|cut:'a'}}
移除掉value中的a字元
⑩ join
使用字串連線列表,和python中的join一樣
{{ list|join:'&'}}
⒒ timesince
{{ 以前的時間|timesince:之後的時間}}
計算之前的時間和之後的時間的時間差,如果引數省略,就是計算以前的時間和現在的時間差
最小的單位是分鐘,如果以前的時間>之後的時間,返回“0分鐘”
⒓ timeutil
{{ 以後的時間|timeutil:之前的時間}}
於timesince類似,計算以後的時間和之前的時間差
三、自定義過濾器
自定義過濾器只是一個帶一個或兩個引數的Python函式
例如過濾器{{ value|foo:"bar" }}是將value和bar作為引數傳遞給foo,bar這個引數可以省略
1、自定義filter的步驟
① 在app下新建一個Python package 名叫templatetags(一定要叫這個名)
② 在templatetags下新建一個py檔案(名字隨便取)my_filter.py
③ 在py檔案中寫函式,實現自定義的filter功能
④ 告訴Django框架多了一個自定義的filter
from django import template
register = template.Library()
@register.filter(name='呼叫時使用的filter名字,可以和函式名不一樣')
def cut(value,arg):
return value.replace(arg, '')
2、使用自定義的filter
① 在HTML檔案中匯入py檔案
{% load my_filter %}
② 重啟Django專案
③ 按照普通的使用filter的方法呼叫
四、Tags(for、if、with)
1、for迴圈
① 普通的for迴圈
{% for user in user_list %}
{% endfor %}
for迴圈可用的一些引數
forloop.counter