Django 中的模板
模板的功能
模板用於產生 html,控制頁面上展示的內容,模板文件不僅僅是一個 html 文件,它包含兩部分內容
- 靜態內容:像 css、js、html
- 動態內容:用於動態生成一些網頁內容,通過模板語言來生成
模板文件的使用
通常是視圖函數中使用模板產生 html 內容返回給客戶端
- 加載模板文件,獲取模板文件的內容,產生一個模板對象
- 定義模板上下文,給模板傳遞數據
- 模板渲染產生 html 頁面內容,用傳遞的數據替換相應的變量,產生一個替換後的標準 html 內容
def index(request):
temp = loader.get_template('login/index.html')
context = {}
res_html = temp.render(context)
return HttpResponse(res_html)
模板文件的加載順序
- 首先去配置的模板目錄下面去找模板文件
- 去 INSTALLED_APPS 下面的每個應用下找模板文件,前提是應用中必須有 templates 文件夾
模板語言
模板語言簡稱爲 DTL(Django Template Language)
模板變量
模板變量是由數字、字母、下劃線、點組成的,不能以雙下劃線開頭
使用模板變量
模板變量通過{{ 模板變量名 }}
這種方式使用
模板變量的解析順序
以{{ user.uname }}
爲例
- 首先把 user 當成一個字典,把 uname 當成鍵名,即對
user['uname']
進行取值 - 把 user 當成一個對象,把 uname 當成屬性,即對
user.uname
進行取值 - 把 user 當成一個對象,把 uname 當成對象的方法,即對
user.uname()
進行取值
再以{{ user.0 }}
爲例
- 首先把 user 當成一個字典,把 0 當成鍵名,即對
user['0']
進行取值 - 把 user 當成一個列表,把 0 當成下標,即對
user[0]
進行取值
如果解析失敗,則產生內容時用空字符串填充模板變量
使用模板變量時,.
前面的可能是一個字典,可能是一個對象,還可能是一個列表
def temp_var(request):
my_dict = {'title' : 'dict_title'}
my_list = ['1', '2', '3']
user = UserLogin.objects.get(id=1)
return render(request, 'login/temp.html', {'dict' : my_dict, 'list' : my_list, 'user' : user})
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>模板變量</title>
</head>
<body>
使用字典屬性:{{ dict.title }}<br>
使用列表元素:{{ list.1 }}<br>
使用對象屬性:{{ user.uname }}
</body>
</html>
模板標籤
通過{% 代碼段 %}
的方式使用模板標籤
for
{% for x in list %}
# 列表不爲空時執行
{% empty %}
# 列表爲空時執行
{% endfor %}
可以通過{{ forloop.counter }}
得到 for 循環當前遍歷的次數
if
{% if 條件 %}
{% elif 條件 %}
{% else %}
{% endif %}
# 關係比較操作符:> < >= <= == !=
# 邏輯運算符:not and or
注意,進行比較操作的時候,比較操作符的兩邊必須要有空格
模板標籤還有很多,可以在官網上查找
過濾器
模板過濾器的作用就是對模板變量進行操作的
- date:改變日期的顯示格式
- length:求長度,字符串、列表、元組、字典長度均可
- default:設置模板變量的默認值
格式:模板變量|過濾器:參數
,例如:
{{ user.re_time|date:'Y年-m月-d日' }}
同樣,過濾器也還有很多,可以去官網上查詢
模板註釋
單行註釋
{# 註釋內容 #}
多行註釋
{% comment %}
註釋內容
{% endcomment %}
值得一提的是,html 中註釋的內容,在瀏覽器的查看源代碼功能中是可以看到的,而這種使用模板註釋,是看不到的