python模板语言_django的模板语言
Django模板語言
1.基礎語法:
return render(request,'qwe.html',{'obj':obj}),render的最后的字典可以以鍵值對的形式傳入多個值,
在django模板中只用到兩種符號
變量相關:{{變量名}}? 邏輯相關:{% %}
1)變量相關:
a: 變量名有字母數(shù)字和下劃線組成,(.)用來獲取對象的屬性值,ls.0 --> ls[0] dic.key --> dic[key]
注意事項:
.只能調(diào)用不帶參數(shù)的方法
當模板系統(tǒng)遇到一個.時,會按照如下的順序去查詢:
1.在字典中查詢? 2.屬性或則方法? 3.數(shù)字索引
b: Filters:過濾器,用來修改變量的顯示結果;
語法:{{value|filter_name:參數(shù)}} 管道符'|'前后不能添加空格,參數(shù)':'前后也沒有,要想加上,必須加上引號
幾個常用的過濾器:
default:如果value值沒有傳,就會顯示默認值nothing
{{ value|default:'nothing' }}
注:在django項目里settings.py文件里的TEMPLATES的OPTIONS可以增加一個選項:string_if_invalid里設置跟default的作用一樣;
filesizeformat:將值格式化為一個'人類可讀的'文件尺寸(KB,MB,byte)
{{ obj.file_size|filesizeformat }}
length:返回值的長度,作用于字符串和列表
{{ value|length }}
slice:切片,跟Python里的切片一樣
{{ value|slice:'2:-1' }}
date:時間格式化(傳入的對象為:datetime.datetime.now())
{{ value|date:'Y-m-d H:i:s'}}
save:django的模板中在往數(shù)據(jù)庫提交數(shù)據(jù)時,會自動對一些不符合的數(shù)據(jù)(html標簽或js代碼等語法)進行轉(zhuǎn)義,為了源html文件不被破壞,但有一些可能不需要轉(zhuǎn)義,所以django用過濾器save來顯示你確認過的安全的數(shù)據(jù)顯示出來
{{ obj.ht_js|safe }}
'ht_js':''這個js代碼就會被執(zhí)行
truncatewords:在6個數(shù)量的字后截取其后字體用三個點代替
{{ value|truncatewords:6 }}
cut:移除value所有的cut后面參數(shù)的字符串
{{ value|cut:' ' }}移除空格
timesince:傳入的時間對象跟當前的時刻的時間的一個時間差,用于寫多長時間之前
{{ value|timesince }}
timeuntil:當前時間對未來的時間的一個時間差,多長時間之后
{{ conference_date|timeuntil:from_date }}
c:自定義filter:自定義過濾器只是帶有一個或兩個位置參數(shù)的Python函數(shù),所以不能用*args或**kwargs
創(chuàng)建filter的步驟:
在django項目中的app01下的文件夾中
創(chuàng)建一個templatetags包(package),在該包下創(chuàng)建一個py文件,來寫自定義的filter函數(shù)
app01/templatetags/mytext--
#導入template
from django importtemplate#生成一個注冊對象
register =template.Library()#裝飾器(告訴django自定義了一個filter)
@register.filter()defadjust(value,arg):print(arg)return value + arg['name']
在html文件中導入使用:
#導入自定義filter文件,跟import類似
{% load mytext %}
#adjust是裝飾器函數(shù),后面參數(shù)可以傳入一個對象
{{ obj.name|adjust:obj }}
注意:在創(chuàng)建一個filter對象時,都要重啟一下
tags:
for循壞可用的一些參數(shù):forloop本身是一個字典,屬性用如下幾項:
VariableDescription
forloop.counter
當前循環(huán)的索引值(從1開始)
forloop.counter0
當前循環(huán)的索引值(從0開始)
forloop.revcounter
當前循環(huán)的倒序索引值(從1開始)
forloop.revcounter0
當前循環(huán)的倒序索引值(從0開始)
forloop.first
當前循環(huán)是不是第一次循環(huán)(布爾值)
forloop.last
當前循環(huán)是不是最后一次循環(huán)(布爾值)
forloop.parentloop
本層循環(huán)的外層循環(huán)
for...empty
- {% for user in user_list %}
- {{ user.name }}{% empty %} 循環(huán)過程結束,沒有符合的條件
- 空空如也{% endfor %}
if,elif和else:
{% if user_list|length > 5 %}
七座豪華SUV
{% else %}
黃包車
{% endif %}
if語句支持and, or , == ,,<=,>=,in,not in,is,is not判斷,但不支持連續(xù)判斷
例如:a>b>c這是Python里可以實現(xiàn),但是在模板語言里寫連續(xù)判斷格式: a>b and b>c
with:修改變量名稱,重命名
{% with total=business.employees.count %}
{{ total }} employee{{ total|pluralize }}
{% endwith %}
csrf_token:
這個標簽用于跨站請求偽造保護(當你開啟一個服務的時候,別人也可以用自己的文件通過瀏覽器向你發(fā)送請求,有可能是惡意的)
所以django添加了csrf用來唯一確定是提交的表單是本頁面發(fā)出的;
在頁面(html文件)上form表單下寫上
{% csrf_token %}
會在表單上添加隱藏的input框(里面是一個64位的隨機數(shù))
自定義simpletag:
和filter類似,都是在模板(html)中接收到數(shù)據(jù)時,可以對其過濾(操作,加功能,給模板變量加裝飾器)
不同的是,filter只能接收1個或2個參數(shù),而simpletag可以接收多個參數(shù);
定義注冊simple tag:
from django importtemplate#register:記錄; 登記簿; 登記,注冊; 自動記錄器; vt. 登記
register =template.Library()
@register.simple_tagdef text(*args,**kwargs):print(args)return args,kwargs
使用自定義simple tag
{% load mytest %}
{% text list key1=dict%}
#傳入兩個對象,分別在裝飾器中處理,然后返回給模板改時間的配置:
1.settings中改? ?USE_L10N = False
2.DATETIME_FORMAT = 'Y-m-d H:i:s'
DATE_FORMAT = 'Y-m-d'? ?這時你的時間對象就會轉(zhuǎn)為時間格式
總結
以上是生活随笔為你收集整理的python模板语言_django的模板语言的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python中exec是什么意思_Pyt
- 下一篇: js和python哪个好_Python与