詳解Python的Django框架中的模版相關(guān)知識(shí)
HTML被直接硬編碼在 Python 代碼之中。
def current_datetime(request): now = datetime.datetime.now() html = "<html><body>It is now %s.</body></html>" % now return HttpResponse(html)
盡管這種技術(shù)便于解釋視圖是如何工作的,但直接將HTML硬編碼到你的視圖里卻并不是一個(gè)好主意。 讓我們來(lái)看一下為什么:
- 對(duì)頁(yè)面設(shè)計(jì)進(jìn)行的任何改變都必須對(duì) Python 代碼進(jìn)行相應(yīng)的修改。 站點(diǎn)設(shè)計(jì)的修改往往比底層 Python 代碼的修改要頻繁得多,因此如果可以在不進(jìn)行 Python 代碼修改的情況下變更設(shè)計(jì),那將會(huì)方便得多。
- Python 代碼編寫(xiě)和 HTML 設(shè)計(jì)是兩項(xiàng)不同的工作,大多數(shù)專(zhuān)業(yè)的網(wǎng)站開(kāi)發(fā)環(huán)境都將他們分配給不同的人員(甚至不同部門(mén))來(lái)完成。 設(shè)計(jì)者和HTML/CSS的編碼人員不應(yīng)該被要求去編輯Python的代碼來(lái)完成他們的工作。
- 程序員編寫(xiě) Python代碼和設(shè)計(jì)人員制作模板兩項(xiàng)工作同時(shí)進(jìn)行的效率是最高的,遠(yuǎn)勝于讓一個(gè)人等待另一個(gè)人完成對(duì)某個(gè)既包含 Python又包含 HTML 的文件的編輯工作。
基于這些原因,將頁(yè)面的設(shè)計(jì)和Python的代碼分離開(kāi)會(huì)更干凈簡(jiǎn)潔更容易維護(hù)。 我們可以使用 Django的 模板系統(tǒng) (Template System)來(lái)實(shí)現(xiàn)這種模式,這就是本章要具體討論的問(wèn)題。
模板系統(tǒng)基本知識(shí)
模板是一個(gè)文本,用于分離文檔的表現(xiàn)形式和內(nèi)容。 模板定義了占位符以及各種用于規(guī)范文檔該如何顯示的各部分基本邏輯(模板標(biāo)簽)。 模板通常用于產(chǎn)生HTML,但是Django的模板也能產(chǎn)生任何基于文本格式的文檔。
讓我們從一個(gè)簡(jiǎn)單的例子模板開(kāi)始。 該模板描述了一個(gè)向某個(gè)與公司簽單人員致謝 HTML 頁(yè)面。 可將其視為一個(gè)格式信函:
<html>
<head><title>Ordering notice</title></head>
<body>
<h1>Ordering notice</h1>
<p>Dear {{ person_name }},</p>
<p>Thanks for placing an order from {{ company }}. It's scheduled to
ship on {{ ship_date|date:"F j, Y" }}.</p>
<p>Here are the items you've ordered:</p>
<ul>
{% for item in item_list %}
<li>{{ item }}</li>
{% endfor %}
</ul>
{% if ordered_warranty %}
<p>Your warranty information will be included in the packaging.</p>
{% else %}
<p>You didn't order a warranty, so you're on your own when
the products inevitably stop working.</p>
{% endif %}
<p>Sincerely,<br />{{ company }}</p>
</body>
</html>
該模板是一段添加了些許變量和模板標(biāo)簽的基礎(chǔ) HTML 。 讓我們逐步分析一下:
用兩個(gè)大括號(hào)括起來(lái)的文字(例如 {{ person_name }} )稱(chēng)為 變量(variable) 。這意味著在此處插入指定變量的值。 如何指定變量的值呢? 稍后就會(huì)說(shuō)明。
被大括號(hào)和百分號(hào)包圍的文本(例如 {% if ordered_warranty %} )是 模板標(biāo)簽(template tag) 。標(biāo)簽(tag)定義比較明確,即: 僅通知模板系統(tǒng)完成某些工作的標(biāo)簽。
這個(gè)例子中的模板包含一個(gè)for標(biāo)簽( {% for item in item_list %} )和一個(gè)if 標(biāo)簽({% if ordered_warranty %} )
for標(biāo)簽類(lèi)似Python的for語(yǔ)句,可讓你循環(huán)訪問(wèn)序列里的每一個(gè)項(xiàng)目。 if 標(biāo)簽,正如你所料,是用來(lái)執(zhí)行邏輯判斷的。 在這里,tag標(biāo)簽檢查ordered_warranty值是否為T(mén)rue。如果是,模板系統(tǒng)將顯示{% if ordered_warranty %}和{% else %}之間的內(nèi)容;否則將顯示{% else %}和{% endif %}之間的內(nèi)容。{% else %}是可選的。
最后,這個(gè)模板的第二段中有一個(gè)關(guān)于filter過(guò)濾器的例子,它是一種最便捷的轉(zhuǎn)換變量輸出格式的方式。 如這個(gè)例子中的{{ship_date|date:”F j, Y” }},我們將變量ship_date傳遞給date過(guò)濾器,同時(shí)指定參數(shù)”F j,Y”。date過(guò)濾器根據(jù)參數(shù)進(jìn)行格式輸出。 過(guò)濾器是用管道符(|)來(lái)調(diào)用的,具體可以參見(jiàn)Unix管道符。
Django 模板含有很多內(nèi)置的tags和filters,我們將陸續(xù)進(jìn)行學(xué)習(xí). 附錄F列出了很多的tags和filters的列表,熟悉這些列表對(duì)你來(lái)說(shuō)是個(gè)好建議. 你依然可以利用它創(chuàng)建自己的tag和filters。
相關(guān)文章
Python實(shí)現(xiàn)把多維數(shù)組展開(kāi)成DataFrame
今天小編就為大家分享一篇Python實(shí)現(xiàn)把多維數(shù)組展開(kāi)成DataFrame,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-11-11
Python tensorflow實(shí)現(xiàn)mnist手寫(xiě)數(shù)字識(shí)別示例【非卷積與卷積實(shí)現(xiàn)】
這篇文章主要介紹了Python tensorflow實(shí)現(xiàn)mnist手寫(xiě)數(shù)字識(shí)別,結(jié)合實(shí)例形式分析了基于tensorflow模塊使用非卷積與卷積算法實(shí)現(xiàn)手寫(xiě)數(shù)字識(shí)別的具體操作技巧,需要的朋友可以參考下2019-12-12
python進(jìn)度條顯示-tqmd模塊的實(shí)現(xiàn)示例
這篇文章主要介紹了python進(jìn)度條顯示-tqmd模塊的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08
python中g(shù)etopt()函數(shù)用法詳解
這篇文章主要介紹了python中g(shù)etopt()函數(shù)用法,通過(guò)getopt模塊中的getopt(?)方法,我們可以獲取和解析命令行傳入的參數(shù),需要的朋友可以參考下2022-12-12
Django+Django-Celery+Celery的整合實(shí)戰(zhàn)
這篇文章主要介紹了Django+Django-Celery+Celery的整合實(shí)戰(zhàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01
python光學(xué)仿真PyQt5基礎(chǔ)框架教程
這篇文章主要為大家介紹了python光學(xué)仿真之PyQt5基礎(chǔ)框架教程,文中含有詳細(xì)實(shí)現(xiàn)示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助2021-10-10
python實(shí)現(xiàn)自動(dòng)生成SQL語(yǔ)句
在數(shù)據(jù)處理和管理中,SQL(Structured?Query?Language)是一種非常重要的語(yǔ)言,本文主要介紹了如何使用python實(shí)現(xiàn)自動(dòng)生成SQL語(yǔ)句,需要的可以參考下2024-04-04
caffe的python接口生成配置文件學(xué)習(xí)
這篇文章主要介紹了caffe的python接口生成配置文件學(xué)習(xí),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06
Python測(cè)試函數(shù)出現(xiàn)AssertionError:None?!=?‘Janis?Joplin‘問(wèn)題及解決
這篇文章主要介紹了Python測(cè)試函數(shù)出現(xiàn)AssertionError:None?!=?‘Janis?Joplin‘問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-09-09

