Django框架 之 模板語言
阿新 • • 發佈:2018-04-12
字符數 tom 存在 counter 代碼 lock view class sem
瀏覽目錄
- 標簽
- 過濾器
一、標簽 Tags
1、普通變量
- 普通變量用{{ }}
- 變量名由數字、字母、下劃線組成
- 點.在模板語言中用來獲取對象相應的屬性值
示例:
{# 取variable中的第一個參數 #} {{ variable.0 }} {# 取字典dic中key的值 #} {{ dic.key }} {# 取obj_list對象列表中第一個對象的attr屬性值 #} {{ obj_list.0.attr }} {# 點操作只能調用不帶參數的方法 #} {{ obj_list.0.method }}
2、邏輯判斷
邏輯判斷用{% %}
for
- 語法:{% for item in item_list %}...{% empty %}...{% endfor %}
- 作用:循環item_list,如果item值為空或不存在,則會執行empty中的代碼,切記要寫endfor結束循環
-
常用for循環參數:
Variable | Description |
forloop.counter | 當前循環的索引值(從1開始) |
forloop.counter0 | 當前循環的索引值(從0開始 |
forloop.revcounter | 當前循環的倒序索引值(從1開始) |
forloop.revcounter0 | 當前循環的倒序索引值(從0開始) |
forloop.first | 當前循環是不是第一次循環(布爾值) |
forloop.last | 當前循環是不是最後一次循環(布爾值) |
forloop.parentloop | 本層循環的外層循環 |
if
- 語法:
{% if some_condition %}...{% elif other_condition %}...{% endif %}
- 作用:條件判斷,切記要寫endif結束條件判斷
- 常用與if語句結合的判斷關鍵字
{% if some_condition %}...{% elif other_condition %}...{% endif %}
with
- 語法
{% with new_variable = old_variable %}.....{% endwith %}
- 作用:定義中間變量
csrf_token
-
語法:在頁面的每個form表單中寫上
{% csrf_token %}
-
作用:用於跨站請求偽造保護
註釋
語法:
{# 註釋內容 #}
3、母板系統
繼承
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="x-ua-compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>Title</title> {% block page-css %} {% endblock %} </head> <body> <h1>這是母板的標題</h1> {% block page-main %} {% endblock %} <h1>母板底部內容</h1> {% block page-js %} {% endblock %} </body> </html>
- 語法
{% extends ‘base.html‘ %}
- 作用:在子頁面中在頁面最上方使用上面的語法來繼承母板
塊block
- 語法
{% block block_name %}...{% endblock %}
- 作用:在子頁面中通過定義母板中的block名來對應替換母板中相應的內容
示例:
{% block page-main %} <p>世情薄</p> <p>人情惡</p> <p>雨送黃昏花易落</p> {% endblock %}
組件
- 語法
{% include ‘subassembly.html‘ %}
- 作用:可以將常用的固定的HTML內容保存在單獨的文件中,在需要的地方用以上語法導入使用
4、靜態文件相關
在Settings中設置static靜態文件夾,在html中導入。
語法:
{% load static %}
例如:
{% load static %} <img src="{% static "images/hi.jpg" %}" alt="Hi!" />
引用JS文件時使用:
{% load static %} <script src="{% static "mytest.js" %}"></script>
某個文件多處被用到可以存為一個變量
{% load static %} {% static "images/hi.jpg" as myphoto %} <img src="{{ myphoto }}"></img>
使用get_static_prefix
{% load static %} <img src="{% get_static_prefix %}images/hi.jpg" alt="Hi!" />
或者
{% load static %} {% get_static_prefix as STATIC_PREFIX %} <img src="{{ STATIC_PREFIX }}images/hi.jpg" alt="Hi!" /> <img src="{{ STATIC_PREFIX }}images/hi2.jpg" alt="Hello!" />
5、自定義simpletag
- 作用:可以自定義標簽,註冊後可使用
-
自定義simpletag的步驟(與自定義Filter類似,不過接收更靈活的參數)
- 在項目的app中創建名為templatetags的文件夾
- 在templatetags的文件夾中創建自定義的py文件,例如:custom_simpletag.py
-
custom_simpletag.py中編寫自定義simpletag,例如:
from django import template register = template.Library() @register.simple_tag(name="my_simpletag") def add_simpletag(a,b,c): # 可接收多個參數 return "{} + {} + {}".format(a, b, c)
-
- 使用自定義simple_tag前,首先在HTML頁面中導入py文件
{% load custom_simpletag %} {% my_simpletag "1" "2" "3" %}
6、自定義inclusion_tag
- 作用:返回html代碼片段
-
自定義inclusion_tag的步驟
- 在項目的app中創建名為templatetags的文件夾
- 在templatetags的文件夾中創建自定義的py文件,例如:custom_inclusiontag.py
-
custom_inclusiontag.py中編寫自定義inclusiontag,例如:
from django import template register = template.Library() @register.inclusion_tag(‘inclusion_tag.html‘) def my_inclusiontag(n): n = 1 if n < 1 else int(n) data = ["第{}項".format(i) for i in range(1, n+1)] return {"data": data}
-
- 在templates文件夾中創建剛才註冊的inclusion_tag.html文件
<ul> {% for choice in data %} <li>{{ choice }}</li> {% endfor %} </ul>
-
- 使用自定義my_inclusiontag前,首先在HTML頁面中導入py文件
{% load custom_inclusiontag %} {% my_inclusiontag 10 %}
二、過濾器 Filter
1、內置過濾器
語法:
{{ value|filter_name:args }}
註意:管道符前後沒有空格
default
- 語法:
{{ value: default: "自定義內容"}}
- 作用:如果value值沒傳的話就顯示自定義內容
length
- 語法:
{{ value|length }}
- 作用:返回value的長度,如 value=[‘a‘, ‘b‘, ‘c‘, ‘d‘]的話,就顯示4.
filesizeformat
- 語法:
{{ value|filesizeformat }}
- 作用:將value格式化為一個 “人類可讀的” 文件大小格式
如果 value 是 123456789,輸出將會是 117.7 MB。
slice
- 語法:
{{value|slice:"start:end"}}
- 作用:切片
date
- 語法:
{{ value|date:"Y-m-d H: i:s"}}
- 作用:將時間格式的value進行自定義格式化
safe
- 語法:
{{value|safe}}
- 作用:取消Django對HTML標簽和JS等語法標簽進行自動轉義,認為插入的HTML或JS是安全的不必轉義
truncatechars
- 語法:
{{ value|truncatechars:num}}
- 作用:如果字符串字符多於指定的字符數量,那麽會被截斷。截斷的字符串將以可翻譯的省略號序列(“…”)結尾。num參數是指截斷的字符數
2、自定義過濾器
步驟
- 在項目的app中創建名為templatetags的文件夾
- 在templatetags的文件夾中創建自定義的py文件,例如:custom_filter.py
-
在custom_filter.py中編寫自定義過濾器,例如:
from django import template register = template.Library() @register.filter(name="my_filter") def my_filter(value, arg): #最多接收兩個參數 return value.replace(arg, "")
- 使用自定義filter前,首先在HTML頁面中導入py文件
{% load custom_filter %} {{ variable|my_filter:"0" }}
Django框架 之 模板語言