Django模板过滤器

2022-09-14 17:45:56 浏览数 (1)

一、过滤器概述

过滤器是通过管道符号(|)进行使用的,例如:{{ name|length }},将返回name的长度。过滤器相当于是一个函数,把当前的变量传入到过滤器中,然后过滤器根据自己的功能,再返回相应的值,之后再将结果渲染到页面中

格式:{{ var|过滤器 }}

作用: 在变量被显示前修改它

二、内置过滤器与标签

模板过滤器可以在变量被显示前修改它,过滤器使用管道字符

lower 文档大写转换文本为小写。

upper 文本转化为大写

capfirst 第一个字母大写

center 输出指定长度的字符串,并把值对中

center:“value”

cut 查找删除指定字符串

cut:“value”

default 如果一个变量没有被提供,或者值为false、空,可以使用默认值

default:“默认值”

default_if_none value值是None,使用指定值

default_if_none:“默认值”

divisibleby 判断是否整除指定数字

divisibleby:“2”

escape 转换为html实体

floatformat 默认保留1位小数

{{ 13.414121241|floatformat:“2” }} 保留2位小数

length 返回长度

random 返回序列的随机一项

wordcount 统计单词数

date 按指定的格式字符串参数格式化 date 或者 datetime 对象

代码语言:javascript复制
<span class="hljs-keyword">from</span> datetime <span class="hljs-keyword">import</span> datetime
{<span class="hljs-string">'date'</span>:datetime.now()}
{{ date|date:<span class="hljs-string">"F j, Y"</span> }}

addslashes 添加反斜杠到任何反斜杠、单引号或者双引号前面

代码语言:javascript复制
letter:<span class="hljs-string">'abcdef'</span>
{{ letter|addslashes }}

join 字符串拼接

代码语言:javascript复制
&lt;h1&gt;{{list|join:<span class="hljs-string">'#'</span>}}&lt;/h1&gt;

striptags 去除html标签

代码语言:javascript复制
{{ code|striptags }}

三、自定义过滤器

目录结构

代码语言:javascript复制
project/
	App/
    	templatetags/  名字固定 否则加载不到
        	__init__.py
          mytag.py  名字自定义

mytag.py代码如下

代码语言:javascript复制
<span class="hljs-keyword">from</span> django <span class="hljs-keyword">import</span> template     <span class="hljs-comment"># 导入模板模块</span>
register = template.Library()  <span class="hljs-comment"># 实例化对象</span>


<span class="hljs-comment"># 自定义过滤器</span>
<span class="hljs-meta">@register.filter</span>
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">sum_filter</span><span class="hljs-params">(x,y)</span>:</span>
    <span class="hljs-keyword">return</span> x y


<span class="hljs-comment"># 自定义标签  可以传递多个参数</span>
<span class="hljs-meta">@register.simple_tag</span>
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">sum_tag</span><span class="hljs-params">(x,y,z)</span>:</span>
    <span class="hljs-keyword">return</span> x y z

在模板中使用

代码语言:javascript复制
{% load mytag %}   加载自定义标签与过滤器的模块名 其中mytag就是mytag.py文件
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h4>首页</h4>
调用过滤器
{{ 1|sum_filter:1 }}
调用标签
{% sum_tag 1 2 3 %}
</body>
</html>

注意

  • 过滤器函数只能传一个参数,
  • 自定义标签可以写多个参数

四、注意

过滤管道可以被套接 ,既是说,一个过滤器管道的输出又可以作为下一个管道的输入

实例

代码语言:javascript复制
{{ my_list|first|upper }} <span class="hljs-comment"># 第一个显示并转化为大写</span>
{{ my_list|last|upper }}  <span class="hljs-comment"># 最后一个显示并转化为大写</span>

0 人点赞