Django框架第十一講-模板的定義、反向解析
jango模板介紹
- 作為Web框架,Django提供了模板,可以很便利的動(dòng)態(tài)生成HTML
- 模版系統(tǒng)致力于表達(dá)外觀,而不是程序邏輯
- 模板的設(shè)計(jì)實(shí)現(xiàn)了業(yè)務(wù)邏輯(view)與顯示內(nèi)容(template)的分離,一個(gè)視圖可以使用任意一個(gè)模板,一個(gè)模板可以供多個(gè)視圖使用
Django模板包含
- HTML的靜態(tài)部分
- 動(dòng)態(tài)插入內(nèi)容部分
- Django模板語言,簡寫DTL,定義在django.template包中
- 由startproject命令生成的settings.py定義關(guān)于模板的值:
- DIRS定義了一個(gè)目錄列表,模板引擎按列表順序搜索這些目錄以查找模板源文件
- APP_DIRS告訴模板引擎是否應(yīng)該在每個(gè)已安裝的應(yīng)用中查找模板
- 常用方式:在項(xiàng)目的根目錄下創(chuàng)建templates目錄,設(shè)置DIRS值
DIRS=[os.path.join(BASE_DIR,"templates")]
Django模板處理
- Django處理模板分為兩個(gè)階段
- Step1 加載:根據(jù)給定的標(biāo)識(shí)找到模板然后預(yù)處理,通常會(huì)將它編譯好放在內(nèi)存中
loader.get_template(template_name),返回一個(gè)Template對(duì)象
- Step2 渲染:使用Context數(shù)據(jù)對(duì)模板插值并返回生成的字符串
Template對(duì)象的render(RequestContext)方法,使用context渲染模板
快捷函數(shù)
- 為了減少加載模板、渲染模板的重復(fù)代碼,django提供了快捷函數(shù)
- render_to_string("")
- render(request,'模板',context)
Django定義模板
- 模板語言包括
- 變量
- 標(biāo)簽 { % 代碼塊 % }
- 過濾器
- 注釋{# 代碼或html #}
變量
{{ variable }}
- 當(dāng)模版引擎遇到一個(gè)變量,將計(jì)算這個(gè)變量,然后將結(jié)果輸出
- 變量名必須由字母、數(shù)字、下劃線(不能以下劃線開頭)和點(diǎn)組成
- 當(dāng)模版引擎遇到點(diǎn)("."),會(huì)按照下列順序查詢:
字典查詢,例如:foo["bar"]
- 屬性或方法查詢,例如:foo.bar
- 數(shù)字索引查詢,例如:foo[bar]
- 如果變量不存在, 模版系統(tǒng)將插入'' (空字符串)
- 在模板中調(diào)用方法時(shí)不能傳遞參數(shù)
在模板中調(diào)用對(duì)象的方法
- 在views.py中傳遞HeroInfo對(duì)象
{{hero.showName}} 標(biāo)簽
- 語法:{ % tag % }
- 作用
- 在輸出中創(chuàng)建文本
- 控制循環(huán)或邏輯
- 加載外部信息到模板中供以后的變量使用
- for標(biāo)簽
- include:加載模板并以標(biāo)簽內(nèi)的參數(shù)渲染
{ %include "foo/bar.html" % }
{ % url 'name' p1 p2 %}
- csrf_token:這個(gè)標(biāo)簽用于跨站請(qǐng)求偽造保護(hù)
{ % csrf_token %}
- 布爾標(biāo)簽:and、or,and比or的優(yōu)先級(jí)高
- block、extends:詳見“模板繼承”
- autoescape:詳見“HTML轉(zhuǎn)義”
過濾器
- 語法:{ { 變量|過濾器 }},例如{ { name|lower }},表示將變量name的值變?yōu)樾戄敵?/li>
- 使用管道符號(hào) (|)來應(yīng)用過濾器
- 通過使用過濾器來改變變量的計(jì)算結(jié)果
- 可以在if標(biāo)簽中使用過濾器結(jié)合運(yùn)算符
if list1|length > 1
- 過濾器能夠被“串聯(lián)”,構(gòu)成過濾器鏈
name|lower|upper
- 過濾器可以傳遞參數(shù),參數(shù)使用引號(hào)包起來
list|join:", "
- default:如果一個(gè)變量沒有被提供,或者值為false或空,則使用默認(rèn)值,否則使用變量的值
value|default:"什么也沒有"
- date:根據(jù)給定格式對(duì)一個(gè)date變量格式化
value|date:'Y-m-d'
注釋
{#...#}
{# { % if foo % }bar{ % else % } #}
- 使用comment標(biāo)簽注釋模版中的多行內(nèi)容
點(diǎn)擊關(guān)注發(fā)私信(基礎(chǔ)視頻),即可獲取下載鏈接:
板介紹
- 模板符號(hào)
談到Python的Django框架的基礎(chǔ)知識(shí)時(shí),下面是一些你應(yīng)該知道的要點(diǎn):
- 安裝和創(chuàng)建項(xiàng)目:首先,你需要安裝Django框架。使用pip命令可以輕松地安裝Django。一旦安裝完成,你可以使用django-admin startproject命令來創(chuàng)建一個(gè)新的Django項(xiàng)目。
- 應(yīng)用程序:Django的項(xiàng)目由多個(gè)應(yīng)用程序組成,每個(gè)應(yīng)用程序處理一個(gè)特定功能模塊。你可以使用python manage.py startapp命令創(chuàng)建新的應(yīng)用程序。每個(gè)應(yīng)用程序包含模型、視圖和模板等組件。
- 模型:Django的模型是與數(shù)據(jù)庫表對(duì)應(yīng)的Python類。定義模型時(shí),你可以指定表的結(jié)構(gòu)和字段。Django的ORM(對(duì)象關(guān)系映射)將會(huì)自動(dòng)創(chuàng)建和管理數(shù)據(jù)庫表。你可以使用簡單的Python代碼來執(zhí)行數(shù)據(jù)庫相關(guān)的操作,如創(chuàng)建、讀取、更新和刪除數(shù)據(jù)。
- 視圖:Django的視圖是處理Web請(qǐng)求的函數(shù)或類。視圖接收請(qǐng)求并返回響應(yīng)。你可以使用裝飾器來定義不同類型的視圖,如基于函數(shù)的視圖或基于類的視圖。視圖還可以包含業(yè)務(wù)邏輯和數(shù)據(jù)處理。
- URL配置:URL配置將URL映射到相應(yīng)的視圖函數(shù)或類。在項(xiàng)目的urls.py文件中,你可以設(shè)置URL規(guī)則和路徑參數(shù)。每個(gè)應(yīng)用程序都有自己的urls.py文件,可以將其包含在項(xiàng)目的urls.py文件中。
- 模板:Django的模板用于生成動(dòng)態(tài)的HTML頁面。你可以在模板中使用變量、過濾器和標(biāo)簽。模板可以幫助你將數(shù)據(jù)以動(dòng)態(tài)方式嵌入到HTML頁面中,并實(shí)現(xiàn)頁面的復(fù)用。
- 靜態(tài)文件管理:Django可以管理并提供靜態(tài)文件,如CSS、JavaScript和圖像等。靜態(tài)文件可以通過STATIC_URL設(shè)置進(jìn)行訪問,并在模板中使用靜態(tài)文件標(biāo)簽進(jìn)行引用。
- 表單處理:Django提供了強(qiáng)大的表單處理功能。你可以使用模型表單或自定義表單來處理用戶的輸入數(shù)據(jù)。Django的表單可以進(jìn)行驗(yàn)證和數(shù)據(jù)清理,以確保數(shù)據(jù)的有效性。
- 用戶認(rèn)證和授權(quán):Django提供了內(nèi)置的用戶認(rèn)證和授權(quán)功能。你可以使用Django的用戶模型來管理用戶賬戶、身份驗(yàn)證和權(quán)限控制。
- 中間件:Django的中間件是處理請(qǐng)求和響應(yīng)的插件。中間件可以攔截請(qǐng)求或響應(yīng),并執(zhí)行一些自定義的處理。它們可以用于實(shí)現(xiàn)日志記錄、身份驗(yàn)證、跨站請(qǐng)求偽造(CSRF)保護(hù)等功能。
這些是Django框架的一些基礎(chǔ)知識(shí)。通過學(xué)習(xí)和實(shí)踐,你將能夠構(gòu)建功能強(qiáng)大的Web應(yīng)用程序。Django有詳細(xì)的官方文檔和教程,供你參考和學(xué)習(xí)。
當(dāng)你掌握了Django的基礎(chǔ)知識(shí)后,以下是一些進(jìn)階的主題,可以幫助你深入學(xué)習(xí)和應(yīng)用Django框架:
- 數(shù)據(jù)庫關(guān)系:學(xué)習(xí)如何在模型中定義不同類型的數(shù)據(jù)庫關(guān)系,如一對(duì)一、一對(duì)多和多對(duì)多關(guān)系。了解如何使用相關(guān)字段、反向關(guān)系和查詢集來處理復(fù)雜的關(guān)系數(shù)據(jù)。
- 視圖類和Mixin:除了函數(shù)視圖外,學(xué)習(xí)如何使用視圖類來組織和重用視圖邏輯。掌握常見的視圖類和Mixin,如ListView、DetailView和FormView,以及如何編寫自定義Mixin。
- Django Admin:深入了解Django Admin后臺(tái)管理界面,學(xué)習(xí)如何自定義后臺(tái)顯示、過濾、搜索、排序和行為等。掌握如何創(chuàng)建自定義的管理命令。
- 信號(hào):學(xué)習(xí)如何使用Django的信號(hào)機(jī)制來實(shí)現(xiàn)模型的觸發(fā)事件,如保存、刪除等。了解常見信號(hào)的使用情景,并自定義信號(hào)處理函數(shù)。
- 緩存:了解如何使用Django的緩存框架來提升應(yīng)用程序的性能。學(xué)習(xí)如何配置緩存后端、使用緩存裝飾器和模板標(biāo)簽來緩存數(shù)據(jù)。
- 測試:深入學(xué)習(xí)如何編寫自動(dòng)化測試,包括模型、視圖、表單和URL的測試。掌握單元測試、功能測試和集成測試的概念和實(shí)踐。
- 安全性:了解常見的Web應(yīng)用安全問題,并學(xué)習(xí)如何在Django應(yīng)用中應(yīng)用最佳實(shí)踐,如跨站請(qǐng)求偽造(CSRF)保護(hù)、跨站腳本攻擊(XSS)防護(hù)、安全的URL構(gòu)建等。
- 國際化和本地化:學(xué)習(xí)如何在Django應(yīng)用中實(shí)現(xiàn)多語言支持和本地化。了解如何使用翻譯機(jī)制、區(qū)域設(shè)置和時(shí)區(qū)處理等功能。
- 第三方包和擴(kuò)展:探索Django生態(tài)系統(tǒng)中豐富的第三方包和擴(kuò)展,如Django REST framework、Django Celery、Django Crispy Forms等。了解如何集成和使用這些擴(kuò)展來增強(qiáng)你的應(yīng)用功能。
- 部署和擴(kuò)展:學(xué)習(xí)如何將Django應(yīng)用程序部署到生產(chǎn)環(huán)境中,包括配置服務(wù)器、使用Web服務(wù)器和應(yīng)用服務(wù)器、使用容器化技術(shù)等。了解如何水平擴(kuò)展和負(fù)載均衡你的應(yīng)用。
這些是Django框架的一些進(jìn)階主題,將幫助你更深入地使用和理解Django。不斷學(xué)習(xí)和實(shí)踐,將使你成為一個(gè)熟練的Django開發(fā)者。希望對(duì)你有所幫助!
、