1 模板的組成
HTML代碼+邏輯控制代碼。
2 邏輯控制代碼的組成
| 邏輯控制代碼類型 | 使用方法 |
|---|---|
| 變量(使用雙大括號來引用變量 ) | {{ var_name }} |
| 標簽(tag)的使用(使用大括號和百分號的組成來表示使用tag ) | {% load staticfiles %} |
| 過濾器(filter)的使用 | {{ ship_date | date:"F j, Y" }},ship_date變量傳給data過濾器,data過濾器通過使用"F j, Y"這幾個參數(shù)來格式化日期數(shù)據(jù)。"|"代表類似Unix命令中的管道操作。 |
2.1 常用標簽(tag)
| 標簽 | 說明 |
|---|---|
| {% if %} | 可以使用and, or, not來組織你的邏輯。但不允許and和or同時出現(xiàn)的條件語句中。新版本中已經(jīng)支持{% elif %}這樣的用法。 |
| {% ifequal %}和{% ifnotequal %} | 比較是否相等,只限于簡單的類型,比如字符串,整數(shù),小數(shù)的比較,列表,字典,元組不支持。 |
| {% for %} | 用來循環(huán)一個list,還可以使用resersed關(guān)鍵字來進行倒序遍歷,一般可以用if語句來先判斷一下列表是否為空,再進行遍歷;還可以使用empty關(guān)鍵字來進行為空時候的跳轉(zhuǎn)。 |
| {% cycle %} | 在循環(huán)時輪流使用給定的字符串列表中的值。 |
| {# #} | 單行注釋 |
| {% comment %} | 多行注釋 |
| {% csrf_token %} | 生成csrf_token的標簽,用于防止跨站攻擊驗證。 |
| {% debug %} | 調(diào)用調(diào)試信息 |
| {% filter %} | 將filter 標簽圈定的內(nèi)容執(zhí)行過濾器操作。 |
| {% autoescape %} | 自動轉(zhuǎn)義設(shè)置 |
| {% firstof %} | 輸出第一個值不等于False的變量 |
| {% load %} | 加載標簽庫 |
| {% now %} | 獲取當前時間 |
| {% spaceless %} | 移除空格 |
| {% url %} | 引入路由配置的地址 |
| {% verbatim %} | 禁止render |
| {% with %} | 用更簡單的變量名緩存復雜的變量名 |
2.2 常用過濾器(filter)
| 過濾器 | 作用 |
|---|---|
| add | 給變量加上響應(yīng)的值 |
| addslashes | 給變量中的引號前加上斜線 |
| capfirst | 首字母大寫 |
| cut | 從字符串中移除指定的字符 |
| date | 格式化日期字符串 |
| default | 如果值是False,就替換成設(shè)置的默認值,否則就使用本來的值 |
| default_if_none | 如果值是None,就替換成設(shè)置的默認值,否則就使用本來的值 |
| dictsort | 按照設(shè)定參數(shù)(key)對應(yīng)的value對列表進行排序 |
| dictsortreversed | 和上面恰好相反 |
| divisibleby | 是否能夠被某個數(shù)字整除,是的話返回True,否則返回False |
| escape | 對字符串進行轉(zhuǎn)義 |
| escapejs | 替換value中的某些字符,以適應(yīng)JAVASCRIPT和JSON格式 |
| filesizeformat | 格式化文件大小顯示 |
| first | 返回列表中的第一個值 |
| last | 返回列表中最后一個值 |
| floatformat | 格式化浮點數(shù) |
| length | 求字符串或者列表長度 |
| length_is | 比較字符串或者列表的長度 |
| urlencode | 對URL進行編碼處理 |
| upper\lower | 大寫\小寫 |
| safe | 對某個變量關(guān)閉自動轉(zhuǎn)義 |
| slice | 切片操作 |
| time | 格式化時間 |
| timesince | 格式化時間 (e.g., “4 days, 6 hours”). |
| truncatechars | 按照字符截取字符串 |
| truncatewords | 按照單詞截取字符串 |
| striptags | 過濾掉html標簽 |
3 模板包含和繼承
3.1 概念
- 包含
{% include %} 允許在模板中包含其它模板的內(nèi)容。
標簽的參數(shù)可以是:模板名稱 、變量、字符串。
{% include 'nav.html' %}
{% include 'app/nav.html' %}
{% include template_name %}
還可以在包含的時候傳遞變量。
- 繼承:
本質(zhì)上說:模板繼承就是先構(gòu)造一個基礎(chǔ)框架模板,而后在其子模板中對它所包含站點共用部分和定義進行重載。
1、定義塊:{% block %}
2、繼承父模板{% extends %}
3.2 注意事項
- 包含和繼承可以把一些共用的網(wǎng)頁模塊獨立出來,以減少代碼的冗余。
- 如果在模板里使用{% extends %}的話,這個標簽必須在所有模板標簽的最前面,否則模板繼承不工作
- 通常盡可能模板里的{% block %}越多越好,子模板不必定義所有的父block
- 如果你需要得到父模板的塊內(nèi)容,{{ block.super }}變量可以幫你完成工作
當你需要給父塊添加內(nèi)容而不是取代它的時候這就很有用 - 不能在同一模板里定義多個同名的{% block %},因為塊標簽同時在兩個地方工作,不僅僅在子模板中,而且在父模板中也填充內(nèi)容,如果子模板有兩個同名的標簽,父模板將不能決定使用哪個塊內(nèi)容來使用
4 參考鏈接
Django 1.9:官方文檔
Django 1.9:官方文檔 - 包含
Django 1.9:官方文檔 - 模塊
Django 1.9:官方文檔 - 繼承
Django 1.82:中文翻譯文檔【僅供參考】