flask---过滤器(default length)

本文通过一个具体的Flask应用实例介绍了如何使用default和length两个过滤器来增强页面显示效果。示例中展示了如何设置默认头像以及如何计算评论列表的长度。

default过滤器:如果当前变量不存在,这时候可以指定默认值,

length过滤器:求列表或者字符串字典元组的长度

#encoding:utf-8
from flask import Flask,render_template

app = Flask(__name__)


@app.route('/')
def index():
    comments=[{
        'user':u'二狗',
        'content':'jierjioeriorei'
    },
        {
         'user':u'大狗',
        'content':'vjoirjoirjior'
        }
             ]
    return render_template('index.html',commnets=comments)


if __name__ == '__main__':
    app.run(debug=True)
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<img src="{{ avatar|default('https://img-ph-mirror.nosdn.127.net/NN7OOz8ODXd47U867WzzuA==/3171660037675940136.png?imageView&thumbnail=223y124&quality=100&crop=0_0_223_94')}}">
<hr>
 <p>评论数({{ commnets|length}})</p>
<ul>
    {% for commnet in commnets %}
       <li>
       <a href="https://img-ph-mirror.nosdn.127.net/NN7OOz8ODXd47U867WzzuA==/3171660037675940136.png?imageView&thumbnail=223y124&quality=100&crop=0_0_223_94">{{commnet.user}}</a>
       <p>{{commnet.content}}</p>
       </li>

    {% endfor %}
    
</ul>
</body>
</html>


Jinja2 是一个流行的模板引擎,广泛用于 Web 开发,尤其在 Python Web 框架如 Flask 和 FastAPI 中。其过滤器可以对变量进行预处理,在渲染模板时生成所需的输出格式,为模板数据处理提供了极大的灵活性[^1][^2]。 ### 内置过滤器 Jinja2 提供了一系列内置过滤器,常用的有: - `abs`:设置数值的绝对值。 - `default`:设置默认值。 - `escape`:转义字符,转成 HTML 的语法。 - `first`:获取上下文的第一个元素。 - `last`:获取上下文的最后一个元素。 - `length`:获取上下文的长度。 - `join`:功能与 Python 的 `join` 语法一致。 - `safe`:将上下文转义处理。 - `int`:将上下文转换为 `int` 类型。 - `float`:将上下文转换为 `float` 类型。 - `lower`:将字符串转换为小写。 - `upper`:将字符串转换为大写。 - `replace`:字符串的替换。 - `truncate`:字符串的截断。 - `striptags`:删除字符串中所有的 HTML 标签。 - `trim`:截取字符串前面和后面的空白字符。 - `string`:将上下文转换成字符串。 - `wordcount`:计算长字符串的单词个数[^4]。 ### 自定义过滤器 可以自定义过滤器以满足特定需求。在 Flask 应用中,可通过 `app.add_template_filter()` 方法注册自定义过滤器。示例代码如下: ```python from flask import Flask, render_template from datetime import datetime app = Flask(__name__) # 自定义过滤器 def datetime_format(value, format="%Y年%m月%d日 %H:%M"): return value.strftime(format) # 将datetime_format函数注册为名为"dformat"的模板过滤器 app.add_template_filter(datetime_format, "dformat") class User: def __init__(self, username, email): self.username = username self.email = email @app.route("/filter") def filter_demo(): user = User(username="小陈", email="xiaochen@qq.com") now_time = datetime.now() return render_template("filter.html", user=user, now_time=now_time) ``` 在上述代码中,首先定义了一个名为 `datetime_format` 的函数,该函数接受一个 `datetime` 对象作为参数,并返回一个格式化的字符串。然后,使用 `app.add_template_filter()` 方法将其注册为名为 `"dformat"` 的模板过滤器[^5]。 ### 过滤器链式操作 虽然 Jinja2 本身不直接支持像 Python 方法那样的链式调用语法,但可以通过在同一个变量上连续应用多个过滤器来实现类似的效果,即对变量进行转换或格式化[^3]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值