前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >模板过滤器

模板过滤器

作者头像
星哥玩云
发布2022-09-14 18:44:17
2280
发布2022-09-14 18:44:17
举报
文章被收录于专栏:开源部署

一、概述

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

二、内置过滤器

abs(value):返回一个数值的绝对值。

示例:{{-1|abs}}

default(value,default_value,boolean=false)如果当前变量没有值,则会使用参数中的值来代替

示例:name|default('lucky') 如果name不存在,则会使用xiaotuo来替代

boolean=False默认是在只有这个变量为undefined的时候才会使用default中的值,如果想使用python的形式判断是否为false,则可以传递boolean=true

代码语言:javascript
复制
<span class="hljs-keyword">return</span> render_template(<span class="hljs-string">'index.html'</span>,var=<span class="hljs-keyword">False</span>)
{{var|default(<span class="hljs-string">'lucky'</span>)}} <span class="hljs-comment"># 显示为 False  因为只有值为undefined才会执行lucky</span>
{{var|default(<span class="hljs-string">'a'</span>,boolean=<span class="hljs-keyword">True</span>)}}  <span class="hljs-comment">#此刻为 lucky</span>

escape(value)或e 转义字符,会将<>等符号转义成HTML中的符号

示例:content|escapecontent|e

first(value) 返回一个序列的第一个元素

示例:names|first

last(value) 返回一个序列的最后一个元素

示例:names|last

format(value,*arags,**kwargs) 格式化字符串

示例:

代码语言:javascript
复制
{{<span class="hljs-string">'我叫:%s 我今年%d岁了 我的存款是 %.2f 元'</span>|format(<span class="hljs-string">'lucky'</span>, <span class="hljs-number">18</span>, <span class="hljs-number">12.5</span>)}}

length(value) 返回一个序列或者字典的长度

示例:names|length

join(value,d=u'') 将一个序列用d这个参数的值拼接成字符串

代码语言:javascript
复制
{{[<span class="hljs-string">'1'</span>,<span class="hljs-string">'2'</span>]|join(<span class="hljs-string">'-'</span>)}}

safe(value) 如果开启了全局转义,那么safe过滤器会将变量关掉转义

示例:content_html|safe

int(value):将值转换为int类型

float(value):将值转换为float类型

string(value) 将变量转换成字符串

list(value) 将变量转换成列表

lower(value):将字符串转换为小写

upper(value):将字符串转换为小写

replace(value,old,new): 替换将old替换为new的字符串

truncate(value,length=255,killwords=False) 截取length长度的字符串

striptags(value) 删除字符串中所有的HTML标签,如果出现多个空格,将替换成一个空格

trim 截取字符串前面和后面的空白字符

wordcount(s) 计算一个长字符串中单词的个数

注意

使用’|'将变量与函数分开,左边是变量名,右边是函数名

三、自定义过滤器

方式一

通过Flask应用对象的add_template_filter方法

代码语言:javascript
复制
<span class="hljs-comment"># 写一个实现 字符超出5个 显示...</span>
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">show_ellipsis</span><span class="hljs-params">(Str,length=<span class="hljs-number">5</span>)</span>:</span>
    <span class="hljs-keyword">if</span>(len(Str))&gt;length:
        Str = Str[<span class="hljs-number">0</span>:length]+<span class="hljs-string">'...'</span>
    <span class="hljs-keyword">return</span> Str

<span class="hljs-comment"># 可以给过滤器器一个名字,如果没有,默认就是函数的名字</span>
app.add_template_filter(show_ellipsis,<span class="hljs-string">'show_ellipsis'</span>)

方式二

通过装饰器来实现自定义过滤器

代码语言:javascript
复制
<span class="hljs-comment"># 如果不传入参数,默认过滤器名字就是函数的名字    </span>
<span class="hljs-meta">@app.template_filter()</span>
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">show_ellipsis</span><span class="hljs-params">(Str,length=<span class="hljs-number">5</span>)</span>:</span>
    <span class="hljs-keyword">if</span>(len(Str))&gt;length:
        Str = Str[<span class="hljs-number">0</span>:length]+<span class="hljs-string">'...'</span>
    <span class="hljs-keyword">return</span> Str
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、概述
  • 二、内置过滤器
  • 三、自定义过滤器
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档