模板 Templates
-
什麼是模板
模板是可以根據字典數據動態變化的html網頁
模板可以根據視圖中傳遞的字典數據動態生成相應的HTML網頁。 -
模板的配置
創建模板文件夾<項目名>/templates
在settings.py
中有一個TEMPLATES
變量BACKEND
: 指定模板的引擎DIRS
: 模板的搜索目錄(可以是一個或多個)APP_DIRS
: 是否要在應用中的templates
文件夾中搜索模板文件OPTIONS
: 有關模板的選項
-
默認的模塊文件夾是項目根目錄下的
templates
-
修改settings.py文件,設置TEMPLATES的DIRS值爲
'DIRS': [os.path.join(BASE_DIR, 'templates')],
# file: settings.py TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', # 'DIRS': [], 'DIRS': [os.path.join(BASE_DIR, 'templates')], # 添加模板路徑 'APP_DIRS': True, # 是否索引各app裏的templates目錄 ... },]
-
模板的加載方式
-
通過
loader
獲取模板,通過HttpResponse
進行響應from django.template import loader # 1.通過loader加載模板 t = loader.get_template("模板文件名") # 2.將t轉換成 HTML 字符串 html = t.render(字典數據) # 3.用響應對象將轉換的字符串內容返回給瀏覽器 return HttpResponse(html)
-
使用
render()
直接加載並響應模板from django.shortcuts import render return render(request,'模板文件名', 字典數據)
-
Django 模板語言
模板的傳參
模板傳參是指把數據形成字典,傳參給模板,爲模板渲染提供數據
-
使用
loader
加載模板t = loader.get_template('xxx.html') html = t.render(字典數據) return HttpResponse(html)
-
使用render加載模板
return render(request,'xxx.html',字典數據)
模板的變量
在模板中使用變量語法
-
{{ 變量名 }}
-
{{ 變量名.index }}
-
{{ 變量名.key}}
-
{{ 對象.方法 }}
-
{{ 函數名 }}
-
視圖函數中必須將變量封裝到
字典
中才允許傳遞到模板上def xxx_view(request) dic = { "變量1":"值1", "變量2":"值2", } return render(request, 'xxx.html', dic)
locals
函數的使用
locals()
返回當前函數作用域內全部局部變量形成的字典。
模板的標籤
-
作用
將一些服務器端的功能嵌入到模板中 -
標籤語法
{% 標籤 %} ... {% 結束標籤 %}
-
if
標籤{% if 條件表達式1 %} ... {% elif 條件表達式2 %} ... {% elif 條件表達式3 %} ... {% else %} ... {% endif %}
if
標籤裏的布爾運算符
if
條件表達式裏可以用的運算符==
,!=
,<
,>
,<=
,>=
,in
,not in
,is
,is not
,not
、and
、or
在if標記中使用實際括號是無效的語法。 如果您需要它們指示優先級,則應使用嵌套的if標記。
-
for
標籤-
語法
{% for 變量 in 可迭代對象 %} ... 循環語句 {% empty %} ... 可迭代對象無數據時填充的語句 {% endfor %}
-
內置變量 -
forloop
變量 描述 forloop.counter 循環的當前迭代(從1開始索引) forloop.counter0 循環的當前迭代(從0開始索引) forloop.revcounter 循環結束的迭代次數(從1開始索引) forloop.revcounter0 循環結束的迭代次數(從0開始索引) forloop.first 如果這是第一次通過循環,則爲真 forloop.last 如果這是最後一次循環,則爲真 forloop.parentloop 當嵌套循環,parentloop 表示外層循環
-
過濾器
-
作用
在變量輸出時對變量的值進行處理
您可以通過使用 過濾器來改變變量的輸出顯示。 -
語法
{{ 變量 | 過濾器1:參數值1 | 過濾器2:參數值2 ... }}
-
常用的過濾器
過濾器 說明 lower 將字符串轉換爲全部小寫。 upper 將字符串轉換爲大寫形式 safe 默認不對變量內的字符串進行html轉義 add: “n” 將value的值增加 n truncatechars:‘n’ 如果字符串字符多於指定的字符數量,那麼會被截斷。 截斷的字符串將以可翻譯的省略號序列(“…”)結尾。 更多過濾器參見:https://docs.djangoproject.com/en/1.11/ref/templates/builtins/
模板的繼承
模板繼承可以使父模板的內容重用,子模板直接繼承父模板的全部內容並可以覆蓋父模板中相應的塊。
-
定義父模板中的塊
block
標籤,標識出哪些在子模塊中是允許被修改的。相當於定出一個頁面的框子,允許變化的地方使用block定義,可以動態修改
block標籤:在父模板中定義,可以在子模板中覆蓋{% block block_name %} 定義模板塊,此模板塊可以被子模板重新定義的同名塊覆蓋 {% endblock block_name %}
-
繼承模板
extends
標籤(寫在模板文件的第一行)
子模板繼承語法標籤:{% extends '父模板名稱' %}
如:{% extends 'base.html' %}
-
子模板重寫父模板中的內容塊
{% block block_name %} 子模板塊用來覆蓋父模板中 block_name 塊的內容 {% endblock block_name %}
-
重寫的覆蓋規則
- 不重寫,將按照父模板的效果顯示
- 重寫,則按照重寫效果顯示
注意:模板繼承時,服務器端的動態內容無法繼承
參考文檔:https://docs.djangoproject.com/en/1.11/ref/templates/
url 反向解析
url 反向解析是指在視圖或模板中,用爲url定義的名稱來查找或計算出相應的路由
- url 函數的語法
url(regex, views, kwargs=None, name="別名")
例如:url(r'^user_login$', views.login_view, name="login")
- url() 的
name
關鍵字參數- 作用:
根據url 列表中的name=
關鍵字傳參給url
確定了個唯一確定的名字,在模板中,可以通過這個名字反向推斷出此url信息 - 在模板中通過別名實現地址的反向解析
{% url '別名' %} {% url '別名' '參數值1' '參數值2' %}
- 作用: