Day043 Jinja2过滤器

  • Post author:
  • Post category:其他



过滤器基本使用

举个例子,哪里用到了过滤器

访问:



xfz.cn/



,说明提示时间处就用到了过滤器

v2-513283b0201d9d4b2558f0b5b94668b8_b.jpg


  • 简单使用


    python文件如:
        @app.route('/')
def hello_world():
 return render_template('index.html',postion=-1)

html页面如:
<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>SXT</title>
</head>
<body>
 <h3>过滤器的基本使用</h3>
 <p>位置的绝对值为[未使用过滤器]{{ postion}}</p>
 <p>位置的绝对值为[使用过滤器]{{ postion|abs}}</p>
</body>
</html>
      


  • 简单总结:


1.

有时候我们想要在模版中对一些变量进行处理,那么就必须需要类似于Python中的函数一样,可以将这个值传到函数中,然后做一些操作。在模版中,过滤器相当于是一个函数,把当前的变量传入到过滤器中,然后过滤器根据自己的功能,再返回相应的值,之后再将结果渲染到页面中。


2.

基本语法: `{

{ variable|过滤器名字 }}` 。使用管道符号 `|` 进行组合。


  • 自定义过滤器

即自定义模版过滤器:

只有当系统提供的过滤器不符合需求后,才须自定义过滤器。过滤器本质上就是一个函数。如果在模版中调用这个过滤器,那么就会将这个变量的值作为第一个参数传给过滤器这个函数,然后函数的返回值会作为这个过滤器的返回值。

需要使用到一个装饰器:`@app.template_filter(‘过滤器名称’)`


  • 自定义时间处理过滤器案例

例如:操作发布新闻 与现在的时间间隔

index.html

        <!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h3>使用自定义过滤器  处理时间</h3>
<p>新闻创建的时间old{{ creat_time }}</p>
<p>新闻间隔现在的时间new{{ creat_time | handle_time }}</p>

</body>
</html>
      



app.py

        from flask import Flask,render_template
from datetime import datetime

app = Flask(__name__)
# 将模版设置为自动加载模式
app.config["TEMPLATES_AUTO_RELOAD"] = True


@app.route('/')
def hello_world():
    context = {
        "creat_time": datetime(2019, 8, 9, 10, 54, 11)
        # datetime(2019, 8, 9, 10, 54, 11)  函数的作用是设置当前这条信息的创建时间为 【2019-8-9 10:54:11】
    }
    # return 'Hello World!'
    return render_template("index.html", **context)     # 使用传参技巧传参


# 6.自定义过滤器   来处理时间
# 需求:操作发布新闻 与现在的时间间隔
@app.template_filter("handle_time")
def handle_time(time):
    """
          time距离现在的时间间隔
          1. 如果时间间隔小于1分钟以内,那么就显示“刚刚”
          2. 如果是大于1分钟小于1小时,那么就显示“xx分钟前”
          3. 如果是大于1小时小于24小时,那么就显示“xx小时前”
          4. 如果是大于24小时小于30天以内,那么就显示“xx天前”
          5. 否则就是显示具体的时间 2018/10/20 16:15
    """
    if isinstance(time, datetime):
        now = datetime.now()
        timestamp = (now - time).total_seconds()     # .total_seconds()  持续时间中的总秒数。
        if timestamp < 60:
            return "刚刚"
        elif timestamp < 60 * 60:
            minutes = timestamp / 60
            return "%s分钟前" % int(minutes)
        elif timestamp < 60*60*24:
            hours = timestamp / (60 * 60)
            return "%s小时前" % int(hours)
        elif timestamp < 60*60*24*30:
            days = timestamp / (60 * 60 * 24)
            return "%s小时前" % int(days)
        else:
            return time.strftime("%Y/%m/%d %H:%M")    # 得到指定格式的时间
    else:
        return time


if __name__ == '__main__':
    app.run()

      

执行完的浏览器界面显示

v2-4ed615e12ea5e9d4b0c4c9b0a8698232_b.jpg



版权声明:本文为Melody_92原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。