語法格式 : {{ name }} # 使用雙大括號來引用變量
1.Template和Context對象(不推薦使用)html
from django.template import Context, Template t = Template('My name is {{ name }}.') c = Context({'name': 'Stephane'}) t.render(c) # in HTML 'My name is Stephane.'
2.深度變量查找(萬能的據點號)python
Python中: a = [1,2,3] b = {"a":"123","b":"456"} HTML中: <span>{{ a.1 }}</span> <span>{{ a.1 }}</span> <span>{{ b.a }}</span> <span>{{ b.b }}</span>
3.變量的過濾器(filter)的使用django
語法格式: {{ obj|fil1.add 給變量加上相應的值 2.addslashes 給變量中的引號前加上斜線 3.capfirst 首字母大寫 4.cut 從字符串中移除指定的字符 5.date 格式化日期字符串 6.default 若是值是空,就替換成設置的默認值,不然就是用原本的值 7.default_if_none 若是值是None,就替換成設置的默認值,不然就使用原本的值 8.{% autoescape off %} {{ name }} {% endautoescape %} 將name中的字符串按照HTML的規則來渲染 9.upper和lower 將文檔轉化成大寫或小寫 10.truncatewords 顯示前n個單詞(英文) 11.urlizetrunc 顯示前n個字符(英文) 12.slice 相似於python的切片操做 13.center 輸出指定長度字符串並把值對中 14.filesizeformat 格式化,使其成爲易讀的文件大小,例如:13KB,4.1MB等。 15.first和last 返回第一個/最後一個 16.length 返回長度 17.join 將列表用指定的字符拼接 # value1 = 2 ;res: 5 <span>{{ value1|add:3 }}</span> # value2 = "al'e'x" ;res: al\'e\'x <span>{{ value2|addslashes }}</span> # value3 = "hello" ;res: Hello <span>{{ value3|capfirst }}</span> # value4 = "nihao" ;res: niao <span>{{ value4|cut:"h" }}</span> # value5 = [ Python中的Datetime類型 ] <span>{{ value5|date:"Y-m-d H:i:s" }}</span> res: 2018-12-18 17:59:07 <span>{{ value5|date }}</span> res:2018年12月18日 #value6 = [] ;res: 空 <span>{{ value6|defult:"否" }}</span> #value7 = None ;res : 空 <span>{{ value7|default_if_none:"空" }}</span> #value8 = "<h3>點擊這裏<a href='www.baidu.com'>跳轉</a></h3>" {% autoescape off %} {{ value8 }} {% endautoescape %} #value9 = "YEllow" <span>{{ value9|upper }}</span> <span>{{ value9|lower }}</span> #value10 = "when i was young" <span>{{ value10|truncatewords:"3" }}</span> <span>{{ value10|urlizetrunc:"3" }}</span> #value11 = "當我年輕的時候" <span>{{ value11|slice:":2" }}</span> 取前兩個字(支持漢字) <span>{{ value11|slice:"2:" }}</span> 從2開始作切片 <span>{{ value11|center:"50" }}</span> #value12 = 2048 <span>{{ value12|filesizeformat }}</span> #value13 = [2018,10,24] <span>{{ value13|join:"-" }}</span>ter:param }}
格式: {% tags %}
①{% if %}app
{% if %} 標籤接受and,or或者not來測試多個變量值或者否認一個給定的變量 {% if %} 標籤不容許同一標籤裏同時出現and和or,不然邏輯容易產生歧義,例以下面的標籤是不合法的: 錯誤示例: {% if obj1 and obj2 or obj3 %} {% if num >= 100 and 8 %} {% if num > 200 %} <p>num大於200</p> {% else %} <p>num大於100小於200</p> {% endif %} {% elif num < 100%} <p>num小於100</p> {% else %} <p>num等於100</p> {% endif %}
②{% for %}框架
<ul> {% for obj in list %} <li>{{ obj.name }}</li> {% empty %} <div>this is empty</div> {% endfor %} </ul> #在標籤裏添加reversed來反序循環列表: {% for obj in list reversed %} ... {% endfor %}
模板for不支持中斷循環,也不支持continue,但內置了一個forloop模板變量oop
循環字典:測試
{% for i in dict.keys %} 循環全部的key值 {% for i in dict.values %} 循環全部的value值 {% for row in dict.items %} 獲得元組 {% for key,value in dict.items %} 獲得一一對應的key-value
③{% csrf_token %} : csrf_token標籤this
用於生成csrf_token的標籤,用於防治跨站攻擊驗證。注意若是你在view的index裏用的是render_to_response方法,不會生效url
其實,這裏是會生成一個input標籤,和其餘表單標籤一塊兒提交給後臺的。spa
④{% url %} 引用路由配置的地址
<form action="{% url "bieming"%}" > <input type="text"> <input type="submit"value="提交"> {%csrf_token%} </form>
⑤{% with %} 用更簡單的變量名替代複雜的變量名
{% with total=fhjsaldfhjsdfhlasdfhljsdal %} {{ total }} {% endwith %}
⑥{% verbatim %}: 禁止render
{% verbatim %} {{ hello }} {% endverbatim %}
⑦{% load %}: 加載標籤庫
a、在app中建立templatetags文件夾
b、建立.py文件,好比my_tags.py
from django import template from django.utils.safestring import mark_safe register = template.Library() #register的名字是固定的,不可改變 @register.filter def filter_multi(v1,v2): return v1 * v2 @register.simple_tag def simple_tag_multi(v1,v2): return v1 * v2 @register.simple_tag def my_input(id,arg): result = "<input type='text' id='%s' class='%s' />" %(id,arg,) return mark_safe(result)
c、在使用自定義simple_tag和filter的html文件中導入以前建立的 my_tags.py :{% load my_tags %}
d、使用simple_tag和filter(如何調用)
in HTML {% load my_Tag %} #首行 # num=12 {{ num|filter_multi:2 }} #24 {{ num|filter_multi:"[22,333,4444]" }} {% simple_tag_multi 2 5 %} 參數不限,但不能放在if for語句中 {% simple_tag_multi num 5 %}
e、在settings中的INSTALLED_APPS配置當前app,否則django沒法找到自定義的simple_tag
注意:filter能夠用在if等語句後,simple_tag不能夠
{% if num|filter_multi:30 > 100 %} {{ num|filter_multi:30 }} {% endif %}
包含:{% include 'nav.html' %}容許在模板中包含其餘模板的內容
繼承:本質上說,模版繼承就是先構造一個基礎框架模版,然後在其子模版中對它所包含站點共用部分和定義進行重載。
注意:
1 包含和繼承能夠把一些共用的網頁模塊獨立出來,以減小代碼的冗餘。
2 若是在模塊裏使用{% extends %}d的話,這個標籤必須在全部模版標籤的最前面,不然模版繼承不工做。
3 一般儘量模版裏的{% block %}越多越好,子模版沒必要定義全部的父block
4 若是你須要父模版的塊內容,{{block.super}}變量能夠幫你完成工做,當你須要爲父塊添加內容而不是取代它的時候這就頗有用。
5 不能在同一模版(不管是父模版仍是子模版)裏定義多個同名{% block %} ,由於塊標籤同時在兩個地方工做,不只在子模版中,並且在父模版中也填充內容,若是子模版有兩個同名的標籤,父模版將不能決定使用哪個塊內容來使用。