filters 過濾
default 替代作用
filesizeformat 格式化為人類可讀
add 給變量加參數
lower 小寫
upper 大寫
title 标題
ljust 左對齊
rjust 右對齊
center 居中
length 傳回value的長度
slice 切片
first 取第一個元素
last 取最後一個元素
join 字元串拼接
truncatechars 截斷
date 日期格式化
safe 标簽轉義
自定義filter
Tags
for for循環可用的一些參數
for ... empty
if ,elif 和 else
with 定義一個中間變量
csrf_token
複制
常用文法
Django模闆中隻需要記兩種特殊符号
{{ }} 和 {% %}
{{ }} 表示變量,在模闆渲染的時候替換成值,{% %} 表示邏輯相關的操作。
變量
{{ 變量名 }}
變量名由字母數字和下劃線組成。
點(.)在模闆中有特殊的含義,用來擷取對象的響應屬性值。
view中代碼:
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICMyYTMvw1dvwlMvwlM3VWaWV2Zh1Wa-YWan5ya3gmZpJjMzcmYvw1NxgDO5MjMtUGall3LcVmdhNXLwRHdo9CXt92YucWbpRWdvx2Yx5yazF2Lc9CX6MHc0RHaiojIsJye.gif)
def template_test(request):
l = [11, 22, 33]
d = {"name": "alex"}
class Person(object):
def __init__(self, name, age):
self.name = name
self.age = age
def dream(self):
return "{} is dream...".format(self.name)
Alex = Person(name="Alex", age=34)
Egon = Person(name="Egon", age=9000)
Eva_J = Person(name="Eva_J", age=18)
person_list = [Alex, Egon, Eva_J]
return render(request, "template_test.html", {"l": l, "d": d, "person_list": person_list})
複制
View Code
模闆中支援的寫法:
{# 取l中的第一個參數 #}
{{ l.0 }}
{# 取字典中key的值 #}
{{ d.name }}
{# 取對象的name屬性 #}
{{ person_list.0.name }}
{# .操作隻能調用不帶參數的方法 #}
{{ person_list.0.dream }}
複制
注:當模闆系統遇到一個(.)時,會按照如下的順序去查詢:
1. 在字典中查詢
2. 屬性或者方法
3. 數字索引
Filters
翻譯為過濾器,用來修改變量的顯示結果
文法:{{ value|filter_name:參數 }}
“ | 左右沒有空格!沒有空格!!”
default
{{ value|default:"nothing" }}
複制
如果value值沒傳的話就顯示nothing
注:TEMPLATES的OPTIONS可以增加一個選項:string_if_invalid:'找不到',可以替代default的作用。
filesizeformat
将值格式話為一個“人類可讀的”檔案尺寸(例如“13KB”,“4.1MB”,等等)。例如
{{ value|filesizeformat }}
複制
如果value是123456789,輸出的将會是117.7MB。
add
給變量加參數
{{ value|add:"2" }}
複制
value是數字4,則輸出結果為6.
{{ first|add:second }}
複制
如果first是【1,2,3】,second【4,5,6】,那輸出結果是【1,2,3,4,5,6】。
lower
小寫
{{ value|lower }}
複制
upper
大寫
{{ value|upper }}
複制
title
标題
{{value|title}}
複制
ljust
左對齊
"{{value|ljust:"10"}}"
複制
rjust
右對齊
"{{value|rjust:"10"}}"
複制
center
居中
"{{value|center:"15"}}"
複制
length
{{ value|length }}
傳回value的長度,如value=[ 'a' , 'b' , 'c' , 'd' ]的話,就顯示4
slice
切片
{{value|slice:"2:-1"}}
複制
first
取第一個元素
{{value|first}}
複制
last
取最後一個元素
{{value|last}}
複制
join
使用字元串拼接清單。同python的str.join(list)。
{{value|join:" // "}}
複制
truncatechars
如果字元串字元多于指定的字元數量,那麼會被截斷。截斷的字元串将以可翻譯的省略号序列(“.......”)結尾
參數:截斷的字元數
{{value|truncatechars:9}}
複制
date
日期格式化
{{value|date:"Y-m-d H:i:s"}}
複制
個可視化輸出的字元:點選檢視
safe
Django的模闆中會對HTML标簽和JS等文法标簽進行轉義,原因顯而易見,這樣是為了安全。但是有的時候我們可能不希望這些HTML元素被轉義,比如我們做一個内容管理系統,背景添加的文章中是經過修飾的,這些修飾可能是通過一個類似于FCKeditor編輯加注了HTML修飾符的文本,如果自動轉義的話顯示的就是保護HTML标簽的源檔案。為了在django中關閉HTML的自動轉義有兩種方式,如果是一個單獨的變量我們可以通過過濾器“|safe”的方式告訴django這段代碼是安全的不必轉義。
比如:
value="<a href='#'>點我</a>"
{{value|safe}}
複制
自定義filter
自定義過濾器隻是帶有一個或兩個參數的python函數:
* 變量(輸入)的值 --- 不一定是一個字元串
* 參數的值 --- 這可以有一個預設值,或完全省略
例如,在過濾器{{ var|foo: 'bar' }} 中,過濾器foo将傳遞變量var和參數“bar”
自定義filter代碼檔案擺放位置:
app01/
__init__.py
models.py
templatetags/ # 在app01下面建立一個package package
__init__.py
app01_filters.py # 建一個存放自定義filter的py檔案
views.py
複制
編寫自定義filter
from django import template
register = template.Library()
@register.filter
def fill(value, arg):
return value.replace(" ", arg)
@register.filter(name="addSB")
def add_sb(value):
return "{} SB".format(value)
複制
使用自定義filter
{# 先導入我們自定義filter那個檔案 #}
{% load app01_filters %}
{# 使用我們自定義的filter #}
{{ somevariable|fill:"__" }}
{{ d.name|addSB }}
複制
Tags
for
<ul>
{% for user in user_list %}
<li>{{ user.name }}</li>
{% endfor %}
</ul>
複制
for循環可用的一些參數:
Variable | Description |
---|---|
for loop.counter | 目前循環的索引值(從1開始) |
foo loop.counter 0 | 目前循環的索引值(從0開始) |
for loop.revcounter | 目前循環的倒序索引值(從1開始) |
for loop.revcounter 0 | 目前循環的倒序索引值(從0開始) |
for loop.first | 目前循環是不是第一次循環(布爾值) |
for loop.last | 目前循環是不是最後一次循環(布爾值) |
for loop.parentloop | 本層循環的外層循環 |
for ... empty
<ul>
{% for user in user_list %}
<li>{{ user.name }}</li>
{% empty %}
<li>空空如也</li>
{% endfor %}
</ul>
複制
if,elif 和 else
{% if user_list %}
使用者人數:{{ user_list|length }}
{% elif black_list %}
黑名單數:{{ black_list|length }}
{% else %}
沒有使用者
{% endif %}
複制
當然也可以隻有if 和 else
{% if user_list|length > 5 %}
七座豪華SUV
{% else %}
黃包車
{% endif %}
複制
if語句支援and,or,==,>,<,!=,<=,>=,in,not in,is,is not 判斷
with
定義一個中間變量
{% with total=business.employees.count %}
{{ total }} employee{{ total|pluralize }}
{% endwith %}
複制
csrf_token
這個标簽用于跨站請求僞造保護
在頁面的from表單裡面寫上{% csrf_token %}
注釋
# ... #
複制
注意事項
1.Django的模闆語言不支援連續判斷,即不支援以下寫法:
{% if a >b >c %}
...
{% endif %}
複制
2. Django的模闆語言中屬性的優先級大于方法
def xx(request):
d = {"a":1,"b":2,"c":3,"items":"100"}
return render(request,"xx.html",{"data":d})
複制
如上,我們在使用render方法渲染一個頁面的時候,傳的字典d有一個key是items并且還有預設的d.items()方法,此時在模闆語言中:
{{data.items}}
複制
預設會取d的items key的值