知識點
- 可以通過過濾器來修改變量的顯示,過濾器的形式是:{{ variable | filter }},管道符號'|'代表使用過濾器
- 過濾器能夠采用鏈式的方式使用,例如:{{ text | escape | linebreaks }}
- 過濾器還可以帶參數,例如: {{ bio|truncatewords:30 }}
- 過濾器的參數中如果帶有空格,那么需要用引號引起來,例如:{{ list | join : ", "}}
- django中有30多個內置過濾器 比如add,cut,date等。
參考文檔
第十章: 深入模板引擎
代碼地址:Spareibs的Github
實驗步驟
在templatetags的文件夾下面創建過濾器poll_filter.py
例子一:去掉字符串中的空格
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Django進階課程</title>
</head>
<body>
<p>歡迎來到Django進階課程</p>
{% load poll_filter %}
{{ "all en" | cut_filter:" " }}
</body>
</html>
from django import template
register = template.Library()
def cut_filter(value, arg):
return value.replace(arg, '')
register.filter(name="cut_filter", filter_func=cut_filter)
或者使用裝飾器來注冊
from django import template
register = template.Library()
@register.filter()
def cut_filter(value, arg):
return value.replace(arg, '')
例子二:將字母變成小寫
from django import template
from django.template.defaultfilters import stringfilter
register = template.Library()
@register.filter()
@stringfilter
def lower(value):
return value.lower()
例子三:Django自定義過濾器是否會自動轉義
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Django進階課程</title>
</head>
<body>
<p>歡迎來到Django進階課程</p>
{% load poll_filter %}
{% with "<h1>hello</h1>" as tmpValue %}
<p>{{ tmpValue | capfirst }}</p>
<hr>
<p>{{ tmpValue | add_no:"world" }}</p>
<hr>
<p>{{ tmpValue | add_yes:"world" }}</p>
{% endwith %}
</body>
</html>
from django import template
from django.utils.safestring import mark_safe
register = template.Library()
# 沒有自動轉義
@register.filter()
def add_no(value, arg):
return "%s %s" %(value, arg)
# 有自動轉義:is_safe 或者mark_safe
@register.filter(is_safe=True)
def add_yes(value, arg):
return mark_safe("%s %s" %(value, arg))