When outputting variables, it also supports using filters to perform preliminary data filtering, formatted as:
{{obj|filter__name:param}}
For example, 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:
Usingdefault
Set the default value:
{{ userName|default:"大侠匿名"}}
default Anything that is empty is considered as not available. 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, and if you specify the value of get_digit, you can retrieve the number at the end. 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 the value is ['a', 'b', 'c', 'd'], then the output is 4.
divisibleby
You can determine if a variable can be evenly divided, such as:
{{ 21|divisibleby:3 }}
{{ 21|divisibleby:"3" }}
{{ 21|float|divisibleby:"3" }}
{{ 22|divisibleby:"3" }}
{{ 85|divisibleby:simple.number }}
{{ 84|divisibleby:simple.number }}
date
Can format time:
{{ 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 return an error.
{{stampToDate(nowStamp, "2006-01-02 15:04")}}
truncatechars
/truncatewords
If a string character or word exceeds the specified character count, it will be truncated. The truncated string will end with a translatable ellipsis sequence ("..."):
{{ value|truncatechars:9}}
{{ value|truncatewords:9}}
Truncate strings, in addition to string truncationtruncatechars
It also supports word truncationtruncatewords
truncatechars_html
/truncatewords_html
Function similartruncatechars
/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
Can convert the case of single characters:
{{ value|upper}}
{{ value|lower}}
capfirst
Can achieve the effect of capitalizing the first letter of a sentence, such as:
{{ "hello there!"|capfirst }}
cut
Can delete specific characters from a variable. For example:
{{ 15|cut:"5" }}
{{ "Hello world"|cut: " " }}
add
Can append content to be output. Equivalent to in Golang:+
If it is a number, it will add up and output the result. If it is a string, it will be concatenated together. For example:
{{ 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
Tags can capitalize the first letter of each word in a sentence and make the rest lowercase, used for formatting title output. For example:
{{ "hello there!"|title }}
{{ "HELLO THERE!"|title }}
{{ "HELLO tHERE!"|title }}
yesno
yesno is used to verify whether a variable is valid, it can define three results, and the three results are separated by English commas,
Separate, valid value, invalid value, unknown type. If not defined, it can also be left blank. For example:
{{ archive.Status|yesno}}
{{ archive.Status|yesno:"validated,not validated,unknown validation status"}}
striptags
striptags 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
Tags can delete specified HTML tags. For example:
{{ "<strong><i>Hello!</i></strong>"|removetags:"i"|safe }}
pluralize
The tag can determine if a variable is plural. For example:
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
Can randomly output a value from a collection. For example:
<p>{{ intList|random }}</p>
first
/last
Can be used to output the first and last characters of a variable. For example:
{{ "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 tags can convert the newline character in the value of the variable<br/>
equivalent to PHP'snl2br
function. For example:
{{ archive.Description|linebreaksbr }}
{{ archive.Description|linebreaks }}
{{ archive.Description|linebreaksbr|safe }}
{{ archive.Description|linebreaks|safe }}
length_is
length_is can determine the length of a variable's value. It can only determine strings, not numbers. For example:
{{ "hello"|length_is:5 }}
integer
/float
Tags can convert a variable's value to an integer or a floating-point number. For example:
{{ "foobar"|integer }}
{{ "5.4"|float|integer }}
{{ "foobar"|float }}
{{ "5.5"|float }}
{{ "5.6"|integer|float }}
floatformat
Tags can retain the value of a variable in floating-point format with a specified number of decimal places. By default, only one decimal place is retained. If the last digit is 0, the decimal point is not retained.If a decimal place is specified, it will be displayed with the specified number of digits.
{{ 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
Can merge an array into a string by a given delimiter. For example:.
{{intList|join:", "}}
split
Just asjoin
In contrast, it can convert a string into an array by using a given delimiter. For example:
{{ "Hello, 99, 3.140000, good"|split:", "|join:", " }}
stringformat
It can format numbers and strings into the specified format for output. Equivalent to:fmt.Sprintf()
For example:
{{ 0.55555|stringformat:"%.2f" }}
{{ 888|stringformat:"Test: %d" }}
{{ "你好"|stringformat:"Chinese: %s" }}
make_list
The string can be split into an array by characters, which is equivalent to[]rune("你好啊")
For example:
{{ "你好啊"|make_list|join:", " }}
{% for char in "你好啊"|make_list %}{{ char }},{% endfor %}
center
This tag is quite interesting, it can format a string to a specified length and place the string in the middle, with spaces filling the sides.If the given length is less than the string length, no change will be made.
'{{ "test"|center:3 }}'
'{{ "test"|center:20 }}'
{{ "test"|center:20|length }}
ljust
/rjust
These two tags arecenter
Similar, both are to pad a string to a specified length, but the padding direction is different.ljust
The spaces will be filled on the right, making the string align to the left.rjust
The spaces will be filled on the left, making the string align to the right. For example:
'{{ "test"|ljust:"20" }}'
{{ "test"|ljust:"20"|length }}
'{{ "test"|rjust:"20" }}'
{{ "test"|rjust:"20"|length }}
wordcount
Used to calculate 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
The string can be wrapped at a given length. For example:
{{ "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
It will automatically add an a tag to the url and email, and automatically increase the nofollow rel.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
is used forurlize
Almost the same, both automatically add an a tag to the url and email, but it can be set to display a portion of the url content, and the part beyond the specified length is...
replaced. For example:
<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 split according to\uxxxx
Encoding the specified characters. For example:
{{ "<p>aaa</p><script>alert('xss');</script><p>bbbb</p>"|escapejs|safe }}
slice
Can slice strings and arrays to a specified length. For example:
{{ "Test"|slice:"1:" }}
{{ "Test"|slice:":3" }}
{{ "Test"|slice:"1:3"|join:"," }}
{{ intList|slice:"1:5"|join:"," }}
safe
Django templates will automatically escape HTML tags and JS syntax tags, which is for security reasons to prevent XSS attacks.
If you do not want to use escaping, you can usesafe
to declare that the content to be output is safe, it will not be automatically escaped, and you can also useautoescape
tags to control the opening and closing of automatic escaping:
用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 automatic escaping, using escape here would result in escaping twice. Therefore, it is usedautoescape off
After escaping, using escape directly is equivalent to outputting. For example:
{{ "<script>alert('xss');</script>" }}
相当于
{% autoescape off %}
{{ "<script>alert('xss');</script>"|escape }}
{% endautoescape %}
All the filter tags mentioned above can be used{% filter 标签名 %}内容{% endfilter %}
to use. For example:
{% 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>