Django框架之模板層
什麼是模板
須要返回給瀏覽器的html文件html
Django的模板 = HTML代碼 + 模板語言前端
模板語言
有與咱們直接返回html頁面的話,那他只是一個靜態頁面沒法實現先後端數據交互,那麼咱們就須要通過頁面渲染,讓靜態文件呈現出動態頁面的效果。python
模板語言的變量
若是咱們須要將後端的數據傳遞到前端頁面渲染,就須要用到模板語言中的變量數據庫
用法:經過{{}}
來獲取後端傳遞過來的數據
變量支持的數據類型:django
- int
- float
- str
- dict
- list
- tuple
- set
- bool
- function
- class
<strong style="color: red;font-size:30px">注:</strong>全部的數據類型只支持點取值,而且函數的值時函數的返回值而且不支持函數傳值,類顯示的是類的內存地址。後端
模板語言的過濾器
用來把視圖傳入的變量值加以修飾後再顯示{{ 變量名|過濾器名:傳遞給過濾器的參數 }}
瀏覽器
經常使用過濾器
# default # 若是一個變量值是False或者爲空,使用default後指定的默認值,不然,使用變量自己的值,若是value=''則輸出默認的內容 {{ value|default:"默認內容" }} # length # 返回值的長度。它對字符串、列表、字典等容器類型都起做用 {{ value|length }} # filesizeformat # 將值的格式化爲一個"人類可讀的"文件尺寸變量的默認單位是字節 {{ value|filesizeformat }} # date #做用:將日期按照指定的格式輸出 {{ value|date:"指定格式" }} # slice # 對輸出的字符串進行切片操做,顧頭不顧尾 {{ value|slice:"0:2" }} # truncatechars # 顯示指定的字符數量,若是大於指定數量,那麼會被截斷,截斷的字符串將以省略號(「...」),而且省略號也佔字符數量 {{ value|truncatechars:8 }} # truncatewords # 與truncatechars相同,但truncatewords是按照單詞截斷,末尾的3個點不算做單詞 {{ value|truncatewords:2 }} # safe # 出於安全考慮,Django的模板會對HTML標籤、JS等語法標籤進行自動轉義,交給瀏覽器後會被解析成普通字符,但若是咱們就想讓模板變量{{ value }}被渲染的結果有語法意義,那麼就用到了過濾器safe {{ value|safe }}
模板語法的標籤
for標籤
# 遍歷每個元素: {% for li in lis %} <p>{{ li }}</p> {% endfor %} # 能夠利用{% for li in lis reversed %}反向循環。 # 遍歷一個字典: {% for key,val in dic.items %} <p>{{ key }}:{{ val }}</p> {% endfor %} # 循環序號能夠經過{{ forloop }}顯示 forloop.counter 當前循環的索引值(從1開始) forloop.counter0 當前循環的索引值(從0開始) forloop.revcounter 當前循環的倒序索引值(從1開始) forloop.revcounter0 當前循環的倒序索引值(從0開始) forloop.first 當前循環是第一次循環則返回True,不然返回False forloop.last 當前循環是最後一次循環則返回True,不然返回False forloop.parentloop 本層循環的外層循環 # for標籤能夠帶有一個可選的{% empty %} 從句,在變量person_list爲空或者沒有被找到時,則執行empty子句 {% for li in lis %} <p>{{ li }}</p> {% empty %} <p>lis爲空</p> {% endfor %}
if標籤
# 注意: {% if 條件 %}條件爲真時if的子句纔會生效,條件也能夠是一個變量,if會對變量進行求值,在變量值爲空、或者視圖沒有爲其傳值的狀況下均爲False # 語法 {% if num > 100 or num < 0 %} <p>無效成績</p> {% elif num > 80 and num < 100 %} <p>優秀</p> {% else %} <p>湊活吧</p> {% endif %} # if語句支持 and 、or、==、>、<、!=、<=、>=、in、not in、is、is not判斷。
with標籤
# with標籤用來爲一個複雜的變量名起別名,若是變量的值來自於數據庫,在起別名後只須要使用別名便可,無需每次都向數據庫發送請求來從新獲取變量的值 {% with li.1.upper as v %} {{ v }} {% endwith %}
自定義過濾器和標籤
前提:
-
在應用中建立templatetags(只能是這個名稱)安全
-
在文件夾中建任意.py文件框架
-
在文件中添加兩條語句函數
from django import template register = template.Library()
而後咱們就可以自定義過濾器與標籤了
自定義標籤
@register.simple_tag def my_multi_tag(v1, v2): # 自定義的標籤能夠定義多個參數 return v1 * v2
自定義過濾器
@register.filter def my_multi_filter(v1 ,v2): # 自定義的過濾器只能定義最多兩個參數 # 針對{{ value1 | 過濾器名稱:value2 }},參數傳遞爲v1=value1,v2=value2 return v1 * v2
模板的導入和繼承
在一個模板文件中,引入或重用另一個模板文件的內容
模板的導入
{% include '模版名稱' %}
模板的繼承
{% extends "模版名稱" %} # 也就是說include有的功能extends全都有,可是extends能夠搭配一個block標籤,用於在繼承的基礎上定製新的內容
若是要繼承模板的內容並定製新內容須要在繼承模板中定義定製區域(使用block標籤)