1.2模板templates
阿新 • • 發佈:2019-08-14
一.模板使用
1. 配置模板目錄
如果命令列建立的專案,需要手動配置模板檔案目錄,如果是Pycharm建立的專案,則無需配置
- 在專案根目錄下建立模板目錄,比如叫
templates
,後續開發模板檔案會放在此目錄下 -
在專案的配置檔案
settings.py
檔案中,進行模板目錄的配置,如下:
2. 定義模板檔案
在templates
目錄中新建一個模板檔案,如show.html
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Title</title> 6 </head> 7 <body> 8 <!-- 顯示模板變數 --> 9 <h1>{我的名字是:{ name }}</h1> 10 11 </body> 12 </html>
3. 模板渲染
方法一:通過render函式
1 from django.shortcuts import render 2 3 def index(request): 4 data_dict = {'name': 'django' } 5 # 引數1:請求物件 6 # 引數2:模組路徑 7 # 引數3:字典資料 8 return render(request, 'index.html', data_dict)
方法二:通過Template物件的render方法
1 from django.template import loader 2 3 def index(request): 4 # 獲取模板物件 5 template = loader.get_template('index.html') # type: Template 6 # 渲染得到字串 7 data_dict = {'name': 'django' } 8 html_str = template.render(data_dict) 9 # 響應請求 10 return HttpResponse(html_str)
二.模板的語法
- 模板變數
- 模板語句
- 過濾器
- 註釋
- 模板繼承
1. 模板變數
變數名必須由字母、數字、下劃線(不能以下劃線開頭)和點組成,語法如下:
{{ 變數 }}
模板變數可以使python的內建型別,也可以是物件。
2. 模板語句
1)for迴圈:
{% for item in 列表 %} {{forloop.counter}} <1-- 表示當前是第幾次迴圈,從1開始 --> {{forloop.counter0}} <!-- 表示當前是第幾次迴圈,從0開始 --> {% empty %} 查下 列表為空或不存在時執行此邏輯 {% endfor %}
2)if條件:
{% if ... %}
邏輯1
{% elif ... %}
邏輯2
{% else %}
邏輯3
{% endif %}
比較運算子如下:
==
!=
<
>
<=
>=
布林運算子如下:
and
or
not
注意:運算子左右兩側必須有空格。
{% if a == 1 %} # 正確
{% if a==1 %} # 錯誤
3. 過濾器
語法如下:
- 使用管道符號|來應用過濾器,用於進行計算、轉換操作,可以使用在變數、標籤中。
-
如果過濾器需要引數,則使用冒號:傳遞引數。
變數|過濾器:引數
{%
if forloop.counter|divisibleby:2 %}
列舉幾個如下:
- safe,禁用html轉義(顯示html標籤樣式,而不是字串)
- length,長度,返回字串包含字元的個數,或列表、元組、字典的元素個數。
-
default,預設值,如果變數不存在時則返回預設值。
data|default:'預設值'
-
date,日期,用於對日期型別的值進行字串格式化,常用的格式化字元如下:
- Y表示年,格式為4位,y表示兩位的年。
- m表示月,格式為01,02,12等。
- d表示日, 格式為01,02等。
- j表示日,格式為1,2等。
- H表示時,24進位制,h表示12進位制的時。
- i表示分,為0-59。
- s表示秒,為0-59。
value|date:"Y年m月j日 H時i分s秒"
4. 註釋
1)單行註釋語法如下:
{#...#}
2)多行註釋使用comment標籤,語法如下:
{% comment %}
...
{% endcomment %}
5. 模板繼承
- 模板繼承和類的繼承含義是一樣的
- 可以使用模板繼承來複用父模板,提高程式碼的複用性,減輕開發人員的工作量。
- 可以通過定義
block
,實現子模板對父模組內容的重寫
父模板
如果發現在多個模板中某些內容相同,那就可以使用block
標籤把這段內容定義到父模板中。
{% block 塊名稱 %}
預留區域,可以編寫預設內容,也可以沒有預設內容
{% endblock %}
子模板
-
使用
extends
標籤繼承父模板,寫在子模板檔案的第一行。{% extends "父模板路徑" %}
-
對有需要的
block
進行重寫:- 不用重寫父模版中的所有block,如果子模版沒有重寫,則使用父模版定義的預設值。
-
可以使用
block.super
來包含父模板的塊中定義的內容,如下{% block 名稱 %} 子模板的內容 {{ block.super }} 顯示父模板中block的內容 {% endblock %}
django文件參考
<https://docs.djangoproject.com/zh-hans/2.1/ref/templates/builtins/>
django過濾器大全
<https://www.cnblogs.com/Deaseyy/p/10859893.html>
&n