django框架模板語言使用方法詳解
本文實例講述了django框架模板語言使用方法。分享給大家供大家參考,具體如下:
模板功能
作用:生成html界面內容,模版致力于界面如何顯示,而不是程序邏輯。模板不僅僅是一個html文件,還包括了頁面中的模板語言。
- 靜態(tài)內容:css,js,html。
- 動態(tài)內容:通過模板語言,動態(tài)生成一些網(wǎng)頁內容
模板使用: 在視圖函數(shù)中,使用模板產(chǎn)生html內容返回給客戶端
方式一:
- 加載模板文件(loader.get_template)
- 模板渲染,產(chǎn)生標準的html頁面內容(render)
通過HttpResponse對象,返回html界面內容給瀏覽器
def index(request): """進入首頁""" context = {} # 字典 # 獲取模板對象 template = loader.get_template('index.html') # 渲染模板, 得到標準的html內容 html_str = template.render(context, request) # 響應請求,返回html界面 return HttpResponse(html_str)
方式二:
通過render()函數(shù)
def index(request): """進入首頁""" context = {} # 字典 return render(request, 'index.html', context)
模板加載流程
Django會依次到以下目錄查找模板文件,如果都找不到,則報錯:
- 項目配置的模板目錄
- admin應用的templates模板目錄
- auth應用的templates模板目錄
應用本身的templates模板目錄
模板語言
DTL.(Django Template Language)簡稱: 模板語言
模板變量
格式: {{ 變量名 }}
模板變量名: 是由數(shù)字,字母,下劃線組成,不能以下劃線開頭。
點(.) 也在會變量部分中出現(xiàn), 點號(.)用來訪問變量的屬性。
當模版系統(tǒng)遇到點("."),它將以這樣的順序查詢:
- 字典查詢(Dictionary lookup)
- 屬性或方法查詢(Attribute or method lookup) (調用方法時不能傳參)
- 數(shù)字索引查詢(Numeric index lookup)
如果模板變量不存在,則生成html內容時用 '' 空字符串代替。
例如: {{ book.btitle }}
1) 首先把book當成一個字典,把btitle當成鍵名,進行取值book['btitle']
2) 把book當成一個對象,把btitle當成屬性或方法,進行取值
例如:{{ book.0 }}
1) 首先把book當成一個字典,把0當成鍵名,進行取值book['0']
2) 把book當成一個列表,把0當成下標,進行取值book[0]
模板標簽
代碼段
{% 代碼段 %}
for 循環(huán)
遍歷列表:
{% for x in 列表 %} 列表不為空時執(zhí)行 {% empty %} 列表為空時執(zhí)行 {% endfor %}
若加上關鍵字reversed則倒序遍歷:
{% for x in 列表 reversed %} {% endfor %}
遍歷字典:
{% for key, value in my_dict.items %} {{ key }}: {{ value }} {% endfor %}
可以通過 {{ forloop.counter }}
判斷for循環(huán)執(zhí)行到第幾次,初始化值從1開始。
if 語句
{% if 條件 %} {% elif 條件 %} {% else %} {% endif %}
關系比較操作符:
> < >= <= == !=
注意:進行比較操作時,比較操作符兩邊必須有空格。
邏輯運算:
not and or
過濾器
過濾器: 用于對模板變量進行操作,使用格式:
模板變量|過濾器:參數(shù)
一、內置過濾器
date: 改變日期的顯示格式。
value|date:"Y年m月j日 H時i分s秒"
length: 求長度。字符串,列表,元組,字典長度
default: 設置模板變量的默認值。
data|default:'默認值'
二、自定義過濾器
需求: 實現(xiàn)兩個自定義過濾器:
(1)判斷是否奇偶
(2)求余操作
實現(xiàn)步驟:
- 創(chuàng)建包: 在應用下創(chuàng)建名字為templatetags的python包(名字固定)
- 創(chuàng)建模塊: 在該templatetags下創(chuàng)建filters.py(名字隨意取),該名字后面會使用到。
定義函數(shù) 自定義過濾器即帶有一個或兩個參數(shù)的python函數(shù):
- 參數(shù)1:模板變量
- 參數(shù)2:參數(shù),可選
裝飾函數(shù)
- 定義一個名字叫 register 的Library對象(名字固定)
- 使用 @register.filter 對過濾器函數(shù)進行裝飾
在模板界面中加載過濾器并使用: 在html中, 通過load標簽導入自定義過濾器, 并使用:
模板注釋
單行注釋:
{# 注釋內容 #}
多行注釋:
{% comment %} 注釋內容 {% endcomment %}
模板繼承
模板繼承: 為了重用html頁面內容
使用格式: {% extends 父模板文件路徑 %}
塊的使用:
在父模板里可以定義塊:
{% block 塊名 %} 塊中的內容(也可以沒有) {% endblock 塊名%}
在子模板頭部聲明繼承父模板:
{% extends 父模板文件路徑 %}
示例:
{% extends "app01/parent.html" %}
在子模板中,重寫父模板中的塊(也可以不重寫):
{% block 塊名 %} {{ block.super}} #獲取父模板中塊的默認內容 重寫的內容 {% endblock 塊名%}
Django中html轉義
通過視圖函數(shù)(render函數(shù))傳給模板的數(shù)據(jù),如果含有特殊字符,默認是會轉義的。
要關閉模板上下文字符串的轉義:可以使用
{{ 模板變量|safe}}
也可以使用:
{% autoescape off %} 模板語言代碼 {% endautoescape %}
模板硬編碼中的字符串默認不會轉義,如果需要轉義,那需要手動進行轉義。
url反向解析
url逆向解析,反向解析
需求:當urls.py中的一個url配置項發(fā)生改變后,項目中所有硬編碼引用該url鏈接的地方,都需要作修改。
解決方法:
給url配置項起個名字,在html界面中,再通過名字引用該url:
# project下的urls.py urlpatterns = [ ... url(r'^', include('app01.urls', namespace='應用名')), ] # app01下的urls.py urlpatterns = [ ... url(r'^index$', views.index, name='url名稱'), ]
在html界面中,通過url標簽進行動態(tài)引用
{% url '應用名:url名稱' %} {% url '應用名:url名稱' 位置參數(shù)1 位置參數(shù)2 %} {% url '應用名:url名稱' 關鍵字參數(shù)1 關鍵字參數(shù)2 %}
參考:
{% url 'app01:index' %} {% url 'app01:show_news' 1 2 %} {% url 'app01:show_news2' category=1 pageNo=2 %}
reverse函數(shù)
問題: 類似的,在python代碼中,同樣存在上面所說的url硬編碼不方便維護的問題
# views.py def url_reverse(request): # url正則配置項修改后,此處url硬編碼代碼需要修改 return redirect("/index") # return redirect("/show_news/1/2") # return redirect("/show_news2/1/2")
解決:使用reverse函數(shù),動態(tài)生成url。
# views.py def url_reverse(request): # 動態(tài)引用 # url = reverse("應用名:url名稱") # url = reverse("應用名:url名稱", args=[位置參數(shù)]) # url = reverse("應用名:url名稱", kwargs={關鍵字參數(shù)}) return redirect(url)
希望本文所述對大家基于Django框架的Python程序設計有所幫助。
相關文章
Python scrapy爬取起點中文網(wǎng)小說榜單
爬蟲的基礎內容已經(jīng)全部學玩,博主決定想著更加標準化以及實用能力更強的scrapy進發(fā),今天記錄自己第一個scrapy爬蟲項目. scrapy爬取起點中文網(wǎng)24小時熱銷榜單,需要的朋友可以參考下2021-06-06python中redis查看剩余過期時間及用正則通配符批量刪除key的方法
這篇文章主要介紹了python中redis查看剩余過期時間及用正則通配符批量刪除key的方法,需要的朋友可以參考下2018-07-07