4 模板層
阿新 • • 發佈:2018-09-11
字符串轉換 for 循環 mesi name 分隔符 深度 line color idt
一、模板語法の重點
1 變量:{{ 變量名 }}
深度查詢時用句點符
過濾器
2 標簽:{{% %}}
二、模板語法の變量
{{ VariableName }} {{ VariableName.屬性 }} 可用 . 符號進行進一步的深度查詢,既可以對列表進行更進一步的查詢取值,也可以對字典進行取值。 {{ VariableName.func }} 在執行對象方法時,不用加()即可執行,這是在 Django 對語法的規定。 {# #} 正常情況下,在 HTML 頁面中的註釋,是可以查看到的。但是模板中的註釋在前端頁面是看不到的。(通過進入開發者模式查看) 空列表渲染後的結果是 [] ,空字符串渲染後是沒有顯示的內容的。 XSS:跨站腳本攻擊。比如在一個可以提交數據的 HMTL 頁面中寫入一組或者多組標簽 "<script>alert(‘hi‘)</script>",則在下次打開此頁面時會出現彈窗。
{{ dict.name.upper }}
字符串的方法是不用加()的,而且沒有參數 了解: locals() 可將函數中的所有數據全部傳入頁面中進行渲染,但是在開發中不建議使用。
三、模板の過濾器
1 常見的過濾器
date:{{ now|date:‘Y-m-d H:m:s‘ }} 在前端頁面格式化輸出時間 可將date 看成函數,now 是第一個參數,: 後面是第二個參數 default:{{ ""|default:"value" }} 給空字符串設置一個默認值 length:{{ "string"|length }} 計算 string 字符串的長度 filesizeformat:{{ file|filesizeformat }} 將文件的大小格式化之後顯示在前端頁面 slice:{{ value|slice:‘2:4‘ }} 將 value 值進行切片,顧頭不顧尾 truncatechars:{{ value|truncatechars:6 }} 加上3個省略號總共顯示6個字符 truncatewords:{{ words|truncatewords:3 }} 將 words 截斷出3個,不包括省略號
safe:{{ tags_string|safe }} 將字符串標簽渲染成 HTML 正常標簽
add:{{ value1|add:value2 }} value1+value2
2 其它過濾器(了解)
過濾器 | 描述 | 示例 |
upper | 以大寫方式輸出 | {{ user.name | upper }} |
add | 給value加上一個數值 | {{ user.age | add:”5” }} |
addslashes | 單引號加上轉義號 | |
capfirst | 第一個字母大寫 | {{ ‘good’| capfirst }} 返回”Good” |
center | 輸出指定長度的字符串,把變量居中 | {{ “abcd”| center:”50” }} |
cut | 刪除指定字符串 | {{ “You are not a Englishman” | cut:”not” }} |
date | 格式化日期 | |
default | 如果值不存在,則使用默認值代替 | {{ value | default:”(N/A)” }} |
default_if_none | 如果值為None, 則使用默認值代替 | |
dictsort | 按某字段排序,變量必須是一個dictionary | {% for moment in moments | dictsort:”id” %} |
dictsortreversed | 按某字段倒序排序,變量必須是dictionary | |
divisibleby | 判斷是否可以被數字整除 |
{{ 224 | divisibleby:2 }} 返回 True |
escape | 按HTML轉義,比如將”<”轉換為”<” | |
filesizeformat | 增加數字的可讀性,轉換結果為13KB,89MB,3Bytes等 |
{{ 1024 | filesizeformat }} 返回 1.0KB |
first | 返回列表的第1個元素,變量必須是一個列表 | |
floatformat | 轉換為指定精度的小數,默認保留1位小數 | {{ 3.1415926 | floatformat:3 }} 返回 3.142 四舍五入 |
get_digit | 從個位數開始截取指定位置的數字 | {{ 123456 | get_digit:’1’}} |
join | 用指定分隔符連接列表 | {{ [‘abc’,’45’] | join:’*’ }} 返回 abc*45 |
length | 返回列表中元素的個數或字符串長度 | |
length_is | 檢查列表,字符串長度是否符合指定的值 | {{ ‘hello’| length_is:’3’ }} |
linebreaks | 用<p>或<br>標簽包裹變量 | {{ “Hi\n\nDavid”|linebreaks }} 返回<p>Hi</p><p>David</p> |
linebreaksbr | 用<br/>標簽代替換行符 | |
linenumbers | 為變量中的每一行加上行號 | |
ljust | 輸出指定長度的字符串,變量左對齊 | {{‘ab’|ljust:5}}返回 ‘ab ’ |
lower | 字符串變小寫 | |
make_list | 將字符串轉換為列表 | |
pluralize | 根據數字確定是否輸出英文復數符號 | |
random | 返回列表的隨機一項 | |
removetags | 刪除字符串中指定的HTML標記 | {{value | removetags: “h1 h2”}} |
rjust | 輸出指定長度的字符串,變量右對齊 | |
slice | 切片操作, 返回列表 | {{[3,9,1] | slice:’:2’}} 返回 [3,9]{{ ‘asdikfjhihgie‘ | slice:‘:5‘ }} 返回 ‘asdik’ |
slugify | 在字符串中留下減號和下劃線,其它符號刪除,空格用減號替換 |
{{ ‘5-2=3and5 2=3‘ | slugify }} 返回 5-23and5-23 |
stringformat | 字符串格式化,語法同python | |
time | 返回日期的時間部分 | |
timesince | 以“到現在為止過了多長時間”顯示時間變量 | 結果可能為 45days, 3 hours |
timeuntil | 以“從現在開始到時間變量”還有多長時間顯示時間變量 | |
title | 每個單詞首字母大寫 | |
truncatewords | 將字符串轉換為省略表達方式 |
{{ ‘This is a pen‘ | truncatewords:2 }}返回 This is ... |
truncatewords_html | 同上,但保留其中的HTML標簽 |
{{ ‘<p>This is a pen</p>‘ | truncatewords:2 }}返回 <p>This is ...</p> |
urlencode | 將字符串中的特殊字符轉換為url兼容表達方式 | {{ ‘http://www.aaa.com/foo?a=b&b=c’ | urlencode}} |
urlize | 將變量字符串中的url由純文本變為鏈接 | |
wordcount | 返回變量字符串中的單詞數 | |
yesno | 將布爾變量轉換為字符串yes, no 或maybe |
{{ True | yesno }} 返回 yes no maybe |
3 自定義過濾器
1 在 settings 中查看 app 是否註冊 2 在 app 下寫一個名字必須是 templatetags 的文件夾 3 在templatetags 文件夾下寫一個自定義的 py 文件(如:test.py) 3.1 from django import template 3.2 register=template.Library() register 的名字不能改變 3.3 @register.filter() 括號中可以傳 name=rename,也可以不傳 3.4 def addstr(x,y): 可以自定義過濾器名字 return x+y 4 在模板中的使用: {% load test %} 先導入自定義的 py 文件 {{ str1|addstr:str2 }} 註意: 自定義的過濾器最多傳2個參數; {{ str1|addstr:str2 }}可以當成 if 的條件
四、靜態文件的配置另外兩種方法(static)
{{% load static %}} 先導入static 方式一: <link href="{% staitic ‘my_css.css‘ %}"> 這裏的 static 指的就是 STATIC_URL 的 static,而 my_css.css 當成參數傳給了static <link href="{% get_static_prefix %}my_css.css"> get_static_prefix 指的就是 STATIC_URL 的 static,然後手動跟 my_css.css拼接路徑
五、模板語法の標簽
1 for 標簽
{% for foo in list %}
{{ foo }}
{{ forloop }}
{% empty %} empty 必須在 for 循環中使用,表示的是若list中有值,不執行下一步;若無值,則執行下一步
{% endfor %}
2 if 標簽
{% if condition %} {{ name }} {% endif %} 註意: if 語句支持邏輯判斷:< / = / > / != / in / not in / is / is not
3 with 重命名標簽
方式一:
{% with rename=dic.name %} 相當於重新賦值
{{ dic.name }}
{{ rename }}
{% endwith %}
方式二:
{% dic.name as rename%}
{{ dic.name }}
{{ rename }}
{% endwith %}
4 自定義標簽
1 在 settings 中查看 app 是否註冊 2 在 app 下寫一個名字必須是 templatetags 的文件夾 3 在templatetags 文件夾下寫一個自定義的 py 文件(如:test.py) 3.1 from django import template 3.2 register=template.Library() register 的名字不能改變 3.3 @register.simple_tag(name=‘rename‘) 3.4 def my_sum(x,y): 可以自定義過濾器名字 code... 可以進行處理 return x+y 4 在模板中的使用: {% load test %} 先導入自定義的 py 文件 {% rename 參數1 參數2%} 以空格對參數進行分隔 註意: 自定義的標簽可以有很多參數;
5 自定義標簽與自定義過濾器最大的區別
自定義的標簽不可做 if 判斷的條件;
自定義的過濾器可以做 if 判斷的條件。
4 模板層