Django之模板語法
模板語法
模板語法之傳值
1、跟變數相關的都使用雙括號 {{}}
2、跟邏輯相關的都使用 {% %}
3、模板檔案中取值一律使用點語法
4、在模板檔案裡面的函式和類,不用加括號,會自動加括號呼叫, 不能傳遞引數
模板語法之過濾器
類似於python裡面的內建方法
1、語法
{{變數|過濾器:引數}}
2、default
如果一個變數是false或者為空,使用給定的預設值。否則,使用變數的值
{{ value|default:"nothing"}}
3、length
返回值的長度。它對字串和列表都起作用。
{{ value|length }}
4、filesizeformat
將值格式化為一個 “人類可讀的” 檔案尺寸 (例如'13 KB'
,'4.1 MB'
,'102 bytes'
, 等等)。
{{ value|filesizeformat }}
如果value
是 123456789,輸出將會是117.7 MB
。
5、date
如果 value=datetime.datetime.now()
{{ value|date:"Y-m-d"}}
6、slice
如果 value=”hello world”
{{ value|slice:"2:-1"}}
7、truncatechars
如果字串字元多於指定的字元數量,那麼會被截斷。截斷的字串將以可翻譯的省略號序列(“…”)結尾。
引數:要截斷的字元數
{{ value|truncatechars:9}}
8、safe
Django的模板中會對HTML標籤和JS等語法標籤進行自動轉義,原因顯而易見,這樣是為了安全。但是有的時候我們可能不希望這些HTML元素被轉義,比如我們做一個內容管理系統,後臺新增的文章中是經過修飾的,這些修飾可能是通過一個類似於FCKeditor編輯加註了HTML修飾符的文字,如果自動轉義的話顯示的就是保護HTML標籤的原始檔。為了在Django中關閉HTML的自動轉義有兩種方式,如果是一個單獨的變數我們可以通過過濾器“|safe”的方式告訴Django這段程式碼是安全的不必轉義。
value="<a href="">點選</a>"
{{ value|safe}}
9、其它過濾器(瞭解)
過濾器 | 描述 | 示例 |
---|---|---|
upper | 以大寫方式輸出 | |
add | 給value加上一個數值 | |
addslashes | 單引號加上轉義號 | |
capfirst | 第一個字母大寫 | |
center | 輸出指定長度的字串,把變數居中 | |
cut | 刪除指定字串 | |
date | 格式化日期 | |
default | 如果值不存在,則使用預設值代替 | |
default_if_none | 如果值為None, 則使用預設值代替 | |
dictsort | 按某欄位排序,變數必須是一個dictionary | |
dictsortreversed | 按某欄位倒序排序,變數必須是dictionary | |
divisibleby | 判斷是否可以被數字整除 | |
escape | 按HTML轉義,比如將”<”轉換為”<” | |
filesizeformat | 增加數字的可讀性,轉換結果為13KB,89MB,3Bytes等 | |
first | 返回列表的第1個元素,變數必須是一個列表 | |
floatformat | 轉換為指定精度的小數,預設保留1位小數 | |
get_digit | 從個位數開始擷取指定位置的數字 | |
join | 用指定分隔符連線列表 | |
length | 返回列表中元素的個數或字串長度 | |
length_is | 檢查列表,字串長度是否符合指定的值 | |
linebreaks | 用
或 |
|
linebreaksbr | 用 標籤代替換行符 |
|
linenumbers | 為變數中的每一行加上行號 | |
ljust | 輸出指定長度的字串,變數左對齊 | |
lower | 字串變小寫 | |
make_list | 將字串轉換為列表 | |
pluralize | 根據數字確定是否輸出英文複數符號 | |
random | 返回列表的隨機一項 | |
removetags | 刪除字串中指定的HTML標記 | |
rjust | 輸出指定長度的字串,變數右對齊 | |
slice | 切片操作, 返回列表 | |
slugify | 在字串中留下減號和下劃線,其它符號刪除,空格用減號替換 | |
stringformat | 字串格式化,語法同python | |
time | 返回日期的時間部分 | |
timesince | 以“到現在為止過了多長時間”顯示時間變數 | |
timeuntil | 以“從現在開始到時間變數”還有多長時間顯示時間變數 | |
title | 每個單詞首字母大寫 | |
truncatewords | 將字串轉換為省略表達方式 | |
truncatewords_html | 同上,但保留其中的HTML標籤 | |
urlencode | 將字串中的特殊字元轉換為url兼容表達方式 | |
urlize | 將變數字串中的url由純文字變為連結 | |
wordcount | 返回變數字串中的單詞數 |
模板語法之標籤
1、迴圈序號可以通過{{forloop}}顯示
forloop.counter The current iteration of the loop (1-indexed) 當前迴圈的索引值(從1開始) forloop.counter0 The current iteration of the loop (0-indexed) 當前迴圈的索引值(從0開始) forloop.revcounter The number of iterations from the end of the loop (1-indexed) 當前迴圈的倒序索引值(從1開始) forloop.revcounter0 The number of iterations from the end of the loop (0-indexed) 當前迴圈的倒序索引值(從0開始) forloop.first True if this is the first time through the loop 當前迴圈是不是第一次迴圈(布林值) forloop.last True if this is the last time through the loop 當前迴圈是不是最後一次迴圈(布林值) forloop.parentloop 本層迴圈的外層迴圈
2、在模板中使用if else for
{% for foo in l %} <p> {# {{ forloop }}#} {% if forloop.first %} 第一次 {% elif forloop.last %} 最後一次 {% else %} {{ foo }} {% endif %} </p> {% endfor %}
3、處理字典
{% for foo in user_dict.keys %} <p> {{ foo }} </p> {% endfor %} {% for foo in user_dict.values %} <p> {{ foo }} </p> {% endfor %} {% for foo in user_dict.items %} <p> {{ foo }} </p> {% endfor %}
模板繼承
1、繼承
模板頁面寫好之後,繼承頁面直接寫{% extends '模板頁面名‘ %}
這樣繼承之後子模版和原模板的內容一摸一樣
2、繼承並支援修改
模板頁面想要修改的部分
{% block content %} <p>亞洲最大的賭場</p> {% endblock %}
子繼承頁面
{% block content %} 修改內容 {% endblock %}
3、一般情況下模板頁面應該至少有三塊可以被修改的區域
1、css區域
2、js區域
3、html區域
這樣寫之後每個頁面就有自己獨有的css程式碼、js程式碼、html程式碼
模板匯入
語法
{% include 匯入頁面 %}
例子
需要被匯入的 <h1>這是left_menu</h1> 匯入 {% include 'left_menu.html' %}