When outputting variables, filters are also supported to perform primary filtering of data. The format is:
{{obj|filter__name:param}}
like a variable, when it has a value, it outputs the current value, and when it does not have a value, it outputs the default value:
usedefault
Set the default value:
{{ userName|default:"大侠匿名"}}
default If it is empty, it is considered to be none. We can also usedefault_if_none
To handle it
{{ userName|default_if_none:"大侠匿名"}}
{{ ""|default_if_none:"n/a" }}
{{ nil|default_if_none:"n/a" }}
get_digit
Can retrieve the number from the variable, or specify the value of get_digit to retrieve the number at the last position. For example:
{{ 1234567890|get_digit:0 }}
{{ 1234567890|get_digit }}
{{ 1234567890|get_digit:2 }}
{{ 1234567890|get_digit:"4" }}
{{ 1234567890|get_digit:10 }}
{{ 1234567890|get_digit:15 }}
uselength
Output length:
{{ value|length }}
If value is ['a', 'b', 'c', 'd'], then the output is 4.
divisibleby
It can be judged whether a variable can be divisible, such as:
{{ 21|divisibleby:3 }}
{{ 21|divisibleby:"3" }}
{{ 21|float|divisibleby:"3" }}
{{ 22|divisibleby:"3" }}
{{ 85|divisibleby:simple.number }}
{{ 84|divisibleby:simple.number }}
date
Time can be formatted:
{{ value|date:``"2006-01-02 15:04"}}
Note that this value must be of type time.Time, not a timestamp. If it is a timestamp, it will throw an error.
{{stampToDate(nowStamp, "2006-01-02 15:04")}}
truncatechars
/truncatewords
String characters, if longer than the specified character count, will be truncated. The truncated string will end with a translatable ellipsis sequence ("...").
{{ value|truncatechars:9}}
{{ value|truncatewords:9}}
Truncate except string truncationtruncatechars
, also supports word truncationtruncatewords
truncatechars_html
/truncatewords_html
Similar functionstruncatechars
/truncatewords
.But these 2 tags are used to extract strings from html, and they will not destroy the html structure.One is to cut by character, and the other is to cut by word.
{{ "This is a long test which will be cutted after some chars."|truncatechars_html:25 }}
{{ "This is a long test which will be cutted after some words."|truncatewords_html:5|safe }}
upper
/lower
Single characters can be converted into case:
{{ value|upper}}
{{ value|lower}}
capfirst
It can realize the capitalization effect of the first letter of a sentence, such as:
{{ "hello there!"|capfirst }}
cut
It can implement the removal of specific characters in variables. like:
{{ 15|cut:"5" }}
{{ "Hello world"|cut: " " }}
add
Can append content to be output. Equivalent to golang's+
, the numbers will be added and the output result will be output, and the strings will be spliced together. like:
{{ 5|add:6 }}
{{ 5|add:nothing }}
{{ 5|add:"test" }}
{{ "hello "|add:"john doe" }}
addslashes
These characters are the single quote ('), double quote ("), backslash (), and NUL (NULL character). For example:
{{ "plain' text"|addslashes }}
{{ "plain' text"|addslashes|safe }}
title
Labels can enable the first letter of each word in a sentence to be uppercase and the rest to be lowercase, which is used to format the output of the title. like:
{{ "hello there!"|title }}
{{ "HELLO THERE!"|title }}
{{ "HELLO tHERE!"|title }}
yesno
yesno is used to validate whether a variable is valid, it can define three results, and the three results are separated by English commas,
Separate, valid value, invalid value, and unknown type. If not defined, you can also leave it blank. like:
{{ archive.Status|yesno}}
{{ archive.Status|yesno:"validated,not validated,unknown validation status"}}
striptags
The `striptags` function is similar to PHP's `strip_tags` function, which can strip HTML, XML, and PHP tags from a string.This tag will always strip HTML comments.
{{"<title>Hello World</title>"|striptags}}
{{"<title>Hello World</title>"|striptags|safe}}
removetags
Labels can delete specified HTML tags. For example:
{{ "<strong><i>Hello!</i></strong>"|removetags:"i"|safe }}
pluralize
Tags can determine whether a variable is a plural. like:
customer{{ 0|pluralize }}
customer{{ 1|pluralize }}
customer{{ 2|pluralize }}
cherr{{ 0|pluralize:"y,ies" }}
cherr{{ 1|pluralize:"y,ies" }}
cherr{{ 2|pluralize:"y,ies" }}
walrus{{ 0|pluralize:"es" }}
walrus{{ 1|pluralize:"es" }}
walrus{{ simple.number|pluralize:"es" }}
random
A value in the set can be output randomly. like:
<p>{{ intList|random }}</p>
first
/last
Can be used to output the first character and the last character in the output variable. like:
{{ "Test"|first }}
{{ "Test"|last }}
urlencode
The `urlencode` tag can perform URL percent encoding on variables. For example:
{{ "https://www.kandaoni.com/?category_id=1"|urlencode }}
linebreaksbr
/linebreaks
Both labels can turn newlines in variable values into<br/>
is equivalent to PHP'snl2br
function. like:
{{ archive.Description|linebreaksbr }}
{{ archive.Description|linebreaks }}
{{ archive.Description|linebreaksbr|safe }}
{{ archive.Description|linebreaks|safe }}
length_is
length_is can be used to determine the length of a variable's value. It can only be used for strings, not numbers. For example:
{{ "hello"|length_is:5 }}
integer
/float
Labels can convert the value of a variable into integers and floating-point numbers. like:
{{ "foobar"|integer }}
{{ "5.4"|float|integer }}
{{ "foobar"|float }}
{{ "5.5"|float }}
{{ "5.6"|integer|float }}
floatformat
{{ 34.23234|floatformat }}
{{ 34.00000|floatformat }}
{{ 34.23234|floatformat:3 }}
{{ 34.00000|floatformat:3 }}
{{ "34.23234"|floatformat }}
{{ "34.00000"|floatformat }}
{{ "34.23234"|floatformat:3 }}
{{ "34.00000"|floatformat:3 }}
join
An array can be matched by a given separation and become a string. like:
{{intList|join:", "}}
split
Just in time andjoin
Instead, it can convert a string into an array by the given separator. like:
{{ "Hello, 99, 3.140000, good"|split:", "|join:", " }}
stringformat
You can format numbers and strings into specified formats to output. Equivalent tofmt.Sprintf()
. like:
{{ 0.55555|stringformat:"%.2f" }}
{{ 888|stringformat:"Test: %d" }}
{{ "你好"|stringformat:"Chinese: %s" }}
make_list
You can split a string into an array by character, which is equivalent to[]rune("你好啊")
. like:
{{ "你好啊"|make_list|join:", " }}
{% for char in "你好啊"|make_list %}{{ char }},{% endfor %}
center
This tag is more interesting. You can format the string to a specified length and place the string in the middle and fill it with spaces next to it. If the given length is less than the string length, no changes are made. like:
'{{ "test"|center:3 }}'
'{{ "test"|center:20 }}'
{{ "test"|center:20|length }}
ljust
/rjust
These two tags andcenter
Almost all, the string is filled to the specified length, but the filling direction is different.ljust
The space will be filled on the right, that is, the string will be left.rjust
The space will be filled on the left, which means that the string will be right. like:
'{{ "test"|ljust:"20" }}'
{{ "test"|ljust:"20"|length }}
'{{ "test"|rjust:"20" }}'
{{ "test"|rjust:"20"|length }}
wordcount
It is used to count the length of a string. It has 2 usage methods, one is at the end of the string, and the other is using the filter tag. For example:
{{ ""|wordcount }}
{% filter wordcount %}{% lorem 25 w %}{% endfilter %}
wordwrap
A string can be wrapped by a given length. like:
{{ "hello world"|wordwrap:2 }}
<pre>{% filter wordwrap:5 %}{% lorem 26 w %}{% endfilter %}</pre>
{{ "Lorem ipsum dolor sit amet, consectetur adipisici elit."|wordwrap:2|linebreaksbr|safe }}
urlize
The URL and email will automatically be added with an <a> tag and will also have the nofollow rel attribute.This is suitable for processing the main text of the article.urlize supports setting true and false to indicate whether the displayed link content is escaped.
<p>{{ "https://www.kandaoni.com"|urlize|safe }}</p>
<p>{{ "www.kandaoni.com"|urlize|safe }}</p>
<p>{{ "kandaoni.com"|urlize|safe }}</p>
<p>{% filter urlize:true|safe %}</p>
<p>Please mail me at [email protected] or visit mit on:</p>
<p>- lorem ipsum http://www.kandaoni.com lorem ipsum</p>
<p>- lorem ipsum https://www.kandaoni.com lorem ipsum</p>
<p>- lorem ipsum https://www.kandaoni.com lorem ipsum</p>
<p>- lorem ipsum www.kandaoni.com lorem ipsum</p>
<p>- lorem ipsum www.kandaoni.com/test="test" lorem ipsum</p>
<p>{% endfilter %}</p>
<p>{% filter urlize:false|safe %}</p>
<p>- lorem ipsum www.kandaoni.com/test="test" lorem ipsum</p>
<p>{% endfilter %}</p>
urlizetrunc
The role ofurlize
Almost the same, both automatically add an a tag to the url and email, but it can be set to truncate the displayed part of the url content, with the part beyond the specified length using...
replace. like:
<p>{% filter urlizetrunc:15|safe %}</p>
<p>Please mail me at [email protected] or visit mit on:</p>
<p>- lorem ipsum http://www.kandaoni.com lorem ipsum</p>
<p>- lorem ipsum https://www.kandaoni.com lorem ipsum</p>
<p>- lorem ipsum https://www.kandaoni.com lorem ipsum</p>
<p>- lorem ipsum www.kandaoni.com lorem ipsum</p>
<p>- lorem ipsum www.kandaoni.com/test="test" lorem ipsum</p>
<p>{% endfilter %}</p>
escapejs
The string will be pressed\uxxxx
Encode preset characters. like:
{{ "<p>aaa</p><script>alert('xss');</script><p>bbbb</p>"|escapejs|safe }}
slice
You can intercept data of a specified length to strings and arrays. like:
{{ "Test"|slice:"1:" }}
{{ "Test"|slice:":3" }}
{{ "Test"|slice:"1:3"|join:"," }}
{{ intList|slice:"1:5"|join:"," }}
safe
Django's templates will automatically escape HTML tags and JavaScript syntax tags, which is for security purposes to prevent XSS attacks.
If you don't want to use escape, usesafe
To declare that the content to be output is safe, it will not be automatically escaped, and it can also be usedautoescape
Tags to control turning on and off automatic escape:
用safe关闭自动转义
{{ "<script>alert('xss');</script>"|safe}}
强制开启自动转义
{% autoescape on %}
{{ "<script>alert('xss');</script>" }}
{% endautoescape %}
强制关闭自动转义,相当于使用了safe
{% autoescape off %}
{{ "<script>alert('xss');</script>" }}
{% endautoescape %}
escape
escape can also be used for declaration escaping. Since default already does so automatically, using escape here will result in escaping twice. Therefore, useautoescape off
After escaping, using `escape` is equivalent to directly outputting. For example:
{{ "<script>alert('xss');</script>" }}
相当于
{% autoescape off %}
{{ "<script>alert('xss');</script>"|escape }}
{% endautoescape %}
All of the `filter` tags mentioned above can be used.{% filter 标签名 %}内容{% endfilter %}
来使用。比如:
{% filter lower %}This is a nice test; let's see whether it works. Foobar. {{ simple.xss }}{% endfilter %}
{% filter truncatechars:10|lower|length %}This is a nice test; let's see whether it works. Foobar. {{ simple.number }}{% endfilter %}
<p>{% filter urlize:false|safe %}</p>
<p>- lorem ipsum www.kandaoni.com/test="test" lorem ipsum</p>
<p>{% endfilter %}</p>