HTML被直接硬編碼在 Python 代碼之中。
def current_datetime(request): now = datetime.datetime.now() html = "It is now %s." % now return HttpResponse(html)
盡管這種技術便于解釋視圖是如何工作的,但直接將HTML硬編碼到你的視圖里卻并不是一個好主意。 讓我們來看一下為什么:
- ??? 對頁面設計進行的任何改變都必須對 Python 代碼進行相應的修改。 站點設計的修改往往比底層 Python 代碼的修改要頻繁得多,因此如果可以在不進行 Python 代碼修改的情況下變更設計,那將會方便得多。
- ??? Python 代碼編寫和 HTML 設計是兩項不同的工作,大多數專業的網站開發環境都將他們分配給不同的人員(甚至不同部門)來完成。 設計者和HTML/CSS的編碼人員不應該被要求去編輯Python的代碼來完成他們的工作。
- ??? 程序員編寫 Python代碼和設計人員制作模板兩項工作同時進行的效率是最高的,遠勝于讓一個人等待另一個人完成對某個既包含 Python又包含 HTML 的文件的編輯工作。
基于這些原因,將頁面的設計和Python的代碼分離開會更干凈簡潔更容易維護。 我們可以使用 Django的 模板系統 (Template System)來實現這種模式,這就是本章要具體討論的問題。
模板系統基本知識
模板是一個文本,用于分離文檔的表現形式和內容。 模板定義了占位符以及各種用于規范文檔該如何顯示的各部分基本邏輯(模板標簽)。 模板通常用于產生HTML,但是Django的模板也能產生任何基于文本格式的文檔。
讓我們從一個簡單的例子模板開始。 該模板描述了一個向某個與公司簽單人員致謝 HTML 頁面。 可將其視為一個格式信函:
Ordering notice Ordering notice
Dear {{ person_name }},
Thanks for placing an order from {{ company }}. It's scheduled to ship on {{ ship_date|date:"F j, Y" }}.
Here are the items you've ordered:
-
{% for item in item_list %}
- {{ item }} {% endfor %}
Your warranty information will be included in the packaging.
{% else %}You didn't order a warranty, so you're on your own when the products inevitably stop working.
{% endif %}
Sincerely,
{{ company }}
該模板是一段添加了些許變量和模板標簽的基礎 HTML 。 讓我們逐步分析一下:
??? 用兩個大括號括起來的文字(例如 {{ person_name }} )稱為 變量(variable) 。這意味著在此處插入指定變量的值。 如何指定變量的值呢? 稍后就會說明。
??? 被大括號和百分號包圍的文本(例如 {% if ordered_warranty %} )是 模板標簽(template tag) 。標簽(tag)定義比較明確,即: 僅通知模板系統完成某些工作的標簽。
??? 這個例子中的模板包含一個for標簽( {% for item in item_list %} )和一個if 標簽({% if ordered_warranty %} )
??? for標簽類似Python的for語句,可讓你循環訪問序列里的每一個項目。 if 標簽,正如你所料,是用來執行邏輯判斷的。 在這里,tag標簽檢查ordered_warranty值是否為True。如果是,模板系統將顯示{% if ordered_warranty %}和{% else %}之間的內容;否則將顯示{% else %}和{% endif %}之間的內容。{% else %}是可選的。
??? 最后,這個模板的第二段中有一個關于filter過濾器的例子,它是一種最便捷的轉換變量輸出格式的方式。 如這個例子中的{{ship_date|date:”F j, Y” }},我們將變量ship_date傳遞給date過濾器,同時指定參數”F j,Y”。date過濾器根據參數進行格式輸出。 過濾器是用管道符(|)來調用的,具體可以參見Unix管道符。
Django 模板含有很多內置的tags和filters,我們將陸續進行學習. 附錄F列出了很多的tags和filters的列表,熟悉這些列表對你來說是個好建議. 你依然可以利用它創建自己的tag和filters。
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
