1.模板系統的語法css
引用變量數據: {{ }}html
標籤邏輯操做:{%...%}後端
2.變量app
變量名由字符數字下劃線組成 ,能夠執行由視圖函數傳過來的對象的方法和屬性 ,可是視圖函數中若是使用 ' . ' 執行對象的方法沒法傳參函數
#views.py
def test(request):
lst = []
dit = {}
class person:
def __init__(self, name, age):
self.name = name
self.age = age
def echo(self):
return '{}*{}歲'.format(self.name, self.age)
def __repr__(self):
return self.name
p1 = person('qgw', 12)
p2 = person('gwq', 15)
lst.append(p1)
lst.append(p2)
dit['p1'] = p1
dit['p2'] = p2
return render(request, 'test-n.html', {'l': lst, 'd': dit,'p1':p1})
#模板語法 ,不能使用括號() ,因此沒法傳參 列表 {# 取列表中的第一個參數,與後端索引相似 #} {{ l.0 }} 字典 若是有鍵是keys ,那麼優先級爲先找鍵 ,再去找屬性方法 {# 根據字典的key取值 #} {{ d.name }} {# 字典的方法items取出kv對 ,keys取出全部的k ,values取出全部的v #} {{ d.items }} {{ d.keys }} {{ d.values }} 對象相關 {# 友好打印列表,返回一堆內存地址,這個調用了__repr__方法 ,重構repr便可 #} {{ p1 }} {# 取對象的name屬性 #} {{ p1.name }} {# .操做只能調用不帶參數的方法 #} {{ p1.echo}}
3. 變量二次處理oop
變量可使用管道作二次處理 ,過濾器是一些已經定義好的處理方法 ,管道能夠有多個處理屢次url
語法: {{ 變量|filter_name:參數 }}spa
default #給變量設置默認值設計
add #把變量拼接與參數code
length #把變量的長度打印出來 ,不能對int類型操做
slice #切片
first #第一個元素
last #最後一個元素
date #將日期格式化
truncatechars #保留指定長度字符串 ,後續變爲...
safe #若是是代碼 ,不加safe默認是不執行的 ,以字符串顯示 ,加了這個就能夠執行
4.標籤邏輯操做
經常使用邏輯有 for if with csrf_token url ,可使用tab鍵補全格式
1) for循環
for循環內部可使用的一些方法
forloop.counter #打印本次循環是第幾回
forloop.counter0 #打印本次循環是第幾回(從0開始)
forloop.revcounter #倒敘打印本次循環第幾回
forloop.revcounter0 #倒敘打印本次循環第幾回(從0開始)
forloop.first #若是是第一次循環 ,返回true
forloop.last #若是是最後一次循環, 返回false
forloop.parentloop #打印外層循環 (多層循環使用) ,能夠在子循環中使用父循環的forloop的方法
empty #當整個for循環中empty以上代碼沒有生成 ,則執行empty下面的代碼
{% extends 'base.html' %} {% block body1 %} <table class="table table-bordered"> {% for objlst in data %} {% for obj in objlst %} <tr> {#將外層循環第一次的內容加上info顏色#} <td {% if forloop.parentloop.first %}class='info'{% endif %}>{{ obj.name }}</td> <td>{{ obj.age }}</td> <td>{{ forloop.counter }}</td> </tr> {% endfor %} {% empty %} <h1>isnone</h1> {% endfor %} </table> {% endblock %}
2)if判斷
if運用比較靈活能夠寫在一個標籤中 ,控制標籤的屬性 如: "<td {% if forloop.parentloop.first %}class='info'{% endif %}>{{ obj.name }}</td>"
{% extends 'base.html' %} {% block body1 %} {% if 10 >= 9|add:2 %} #add是加法和減法 <h2>1</h2> {% else %} <h2>2</h2> {% endif %} {% endblock %}
3)with別名
with別名區域 ,在指定區域中一個變量能夠經過別名方式引用
{% extends 'base.html' %} {% block body1 %} {{ zheshiyige_obj.name }} {#別名方式#} {% with zheshiyige_obj as obj %} {{ obj.name }} {% endwith %} {% endblock %}
5.模板與繼承
模板: 就是一個普通的html頁面 ,可是是公共部分 ,有效避免代碼重複 ,寫多個不一樣的block塊 ,子頁面中邏輯的內容放入block中 ,一般css和js的引用也會設計一個block
子頁面繼承模板方法 :
頁面第一行{% extends '模板.html' %}
{% block 塊名 %}
{% endblock %}
6.組件
組件也是避免代碼重複 ,是一小塊代碼 ,須要給不少頁面使用
組件使用 {% include 'html頁面' %}
#zj.html <h2>這裏是oooo</h2> #其餘頁面引用 {% include 'zj.html' %}
7.靜態文件配置名
和路有別名做用差很少 ,爲了防止static靜態目錄名的變動 ,咱們將靜態目錄起個別名放在settings中 ,全部模板中引用靜態文件的時候 ,直接使用靜態文件別名或相對路徑便可
#settings.py STATICFILES_DIRS = [ os.path.join(BASE_DIR, 'static') #指定靜態文件的根目錄 ] #html頁面引用靜態文件 {% load static %} #導入靜態文件 {% static '相對路徑文件名' %} #引用靜態文件