过滤器和标签
1 模版簡(jiǎn)介
?????????????????? DTL:django模板語(yǔ)言
?????????????????? 核心:
??????????????????????????? 變量 {{ }}
??????????????????????????? 標(biāo)簽 {% %}
??????????????????
???????? 2 模版語(yǔ)法之變量
?????????????????? -變量渲染:{{變量}}
?????????????????? -變量深度查詢:{{變量.索引/key值/方法}}
?
def index(request):
??? age=18
??? name='lqzzzzzzzzzzzzzzz'
??? name2='lqz is very big'
??? dic={'name':'lqz','age':18,'hobby':['play','game']}
??? ll=['lqz',18,'ppp',123]
??? ll3=[[1,5,3],[6,9]]
??? ll2=[]
??? href='<a href="http://www.baidu.com">點(diǎn)我看美女</a>'
??? href2=mark_safe(href)
??? ctime=datetime.datetime.now()
??? file_size=102453425342345234523
??? bol=True
??? # locals()? 代表把當(dāng)前函數(shù)中的所有局部變量,傳到模板中
??? class Person():
??????? def __init__(self,name):
??????????? self.name=name
??????? def test(self):
??????????? return self.name
??????? def __str__(self):
??????????? return self.name
??????? @classmethod
??????? def test2(cls):
??????????? return '123'
??? lqz=Person('lqz')
??? # 在模板上寫(xiě)變量的時(shí)候,相當(dāng)于執(zhí)行了print方法,如果是方法,不能加括號(hào),它會(huì)自動(dòng)加括號(hào),但是不支持傳參數(shù)
??? print(lqz)
??? print(lqz.test())
??? return render(request,'index.html',locals())
???????? 3 模版之過(guò)濾器
?????????????????? 變量之過(guò)濾器(是個(gè)函數(shù))
?????????????????? -語(yǔ)法:(后面只能傳一個(gè)參數(shù))
??????????????????????????? {{變量名|過(guò)濾器的名字:參數(shù)}}
?????????????????? -內(nèi)置過(guò)濾器:
??????????????????????? 數(shù)字+3:
??????????????????????????? <p>{{ age|add:3 }}</p>
??????????????????????????? name的長(zhǎng)度:
??????????????????????????? <p>{{ name|length }}</p>
??????????????????????????? bol有值取值沒(méi)有默認(rèn)為123
??????????????????????????? <p>{{ bol|default:'123' }}</p>
??????????????????????????? <p>{{ ll2|default:'我是空的' }}</p>
??????????????????????????? 對(duì)文件大小的轉(zhuǎn)換格式
???????? ?????????????????? <p>{{ file_size|filesizeformat }}</p>
??????????????????????????? 時(shí)間:
??????????????????????????? <p>{{ ctime }}</p>
??????????????????????????? <p>{{ ctime|date:'Y年m月' }}</p>
??????????????????????????? 從索引2到4切出來(lái)
??????????????????????????? <p>{{ name|slice:'2:4' }}</p>
??????????????????????????? 從開(kāi)頭切出6個(gè)字符后面三個(gè)是...
??????????????????????????? <p>{{ name|truncatechars:6 }}</p>
??????????????????????????? 切出2個(gè)詞語(yǔ)后跟...
??????????????????????????? <p>{{ name2|truncatewords:2}}</p>
??????????????????
?????????????????? '??????? 可以點(diǎn)擊跳轉(zhuǎn)
??????????????????????????? <p>{{ href|safe }}</p>
??????????????????????????? views中的代碼: href='<a href="http://www.baidu.com">打開(kāi)百度</a>
???????????????????????????????????????????????????????
???????? 4 模版之標(biāo)簽
?????????????????? -語(yǔ)法:{% %}
?????????????????? -foo是一個(gè)可迭代對(duì)象
?????????????????? ??? {% for a in foo %}
?
??????????????????????????? {% endfor %}
?????????????????? -forloop:counter,couter0,revcounter,revcouter0,first,last,parentloop:父循環(huán)的forloop對(duì)象
?????????????????? -for--empty的使用
??????????????????????????? {% for foo in ll2 %}
???????????????????????????????????? {{ foo }}
??????????????????????????? {% empty %}
???????????????????????????????????? 沒(méi)有值啊
??????????????????????????? {% endfor %}
?????????????????? -if判斷
??????????????????????????? {% if ll2 %}
???????????????????????????????????? ll2 有值
??????????????????????????? {% elif ll %}
???????????????????????????????????? ll有值
??????????????????????????? {% else %}
???????????????????????????????????? ll2 沒(méi)有值
??????????????????????????? {% endif %}
?????????????????? -with重命名
??????????????????????????? {% with dic.hobby.1 as a %}
??????????????????????????? {#{% with a=dic.hobby.1 %}#}
???????????????????????????????????? {{ a }}
???????????????????????????????????? <p>aaaa</p>
???????????????????????????????????? {{ a }}
?
??????????????????????????? {% endwith %}
???????????????????????????
???????? 5 自定義過(guò)濾器
?????????????????? 1 確認(rèn)app是否在settings中注冊(cè)
?????????????????? 2 在app下創(chuàng)建templatetags的模塊(名字固定)
?????????????????? 3 在模塊下創(chuàng)建py文件(名字隨意)--->在模板中{% load py文件名字%}
?????????????????? 4 在py文件中寫(xiě)過(guò)濾器
??????????????????????????? from django.template import Library
??????????????????????????? register = Library()
??????????????????????????? #指定了name之后,模板上使用的時(shí)候,直接用name調(diào)用,如果沒(méi)指定name,就用函數(shù)的名字
??????????????????????????? # 過(guò)濾器最多有兩個(gè)參數(shù)
??????????????????????????? @register.filter(name='myadd')
??????????????????????????? def my_add(a,b):
???????????????????????????????????? print(a+b)
???????????????????????????????????? return a+b
?????????????????? 5 模板中使用
??????????????????????????? -1 {% load py文件名字%}
???????? ?????????????????? -2 {{ 變量|myadd:1}}
???????? 6 自定義標(biāo)簽
?????????????????? 1 確認(rèn)app是否在settings中注冊(cè)
?????????????????? 2 在app下創(chuàng)建templatetags的模塊(名字固定)
?????????????????? 3 在模塊下創(chuàng)建py文件(名字隨意)--->在模板中{% load py文件名字%}
?????????????????? 4 在py文件中寫(xiě)過(guò)濾器
??????????????????????????? from django.template import Library
??????????????????????????? register = Library()
??????????????????????????? #指定了name之后,模板上使用的時(shí)候,直接用name調(diào)用,如果沒(méi)指定name,就用函數(shù)的名字
??????????????????????????? # 過(guò)濾器最多有兩個(gè)參數(shù)
??????????????????????????? @register.simple_tag(name='mytag')
??????????????????????????? def my_tag(a,b,c):
???????????????????????????????????? return a+b+c
?????????????????? 5 模板中使用
??????????????????????????? -1 {% load py文件名字%}
??????????????????????????? -2 {% mytag 參數(shù)1 參數(shù)2 參數(shù)3%}
???????? 7 標(biāo)簽和過(guò)濾器的區(qū)別:
?????????????????? 1 標(biāo)簽可以傳多個(gè)參數(shù),過(guò)濾器最多只能傳2個(gè)
?????????????????? 2 使用過(guò)濾器{{ }}?? 標(biāo)簽使用:{% %}
?????????????????? 3 ****重點(diǎn):過(guò)濾器可以放在if判斷后,標(biāo)簽不能放在if判斷后
??????????????????
?
轉(zhuǎn)載于:https://www.cnblogs.com/zhouhai007/p/10252603.html
總結(jié)
- 上一篇: dubbo异常处理
- 下一篇: 【[TJOI2018]异或】