Flask基于jinja2的自定义过滤器使用方法详解

查了很多文档,flask的过滤器其实就和tp框架的自定义函数是一样东西,就是操作起来比原来thinkphp框架麻烦些,首先框架没有一个提前定义好的自定义函数库,在这里暂时称为自定义函数模块吧。再则写了一个自定义过滤器模块他也不能自动挂载,需要我们导入下,下面就直接上代码吧,最新版的flask,还在不断的踩坑中

首先我们在独立的模块下面创建一个common.py来写自定义过滤器的一些方法,内容如下:

#!/usr/bin/env/python3
#coding:utf-8
__author__ = 'yang.su'

from flask import Flask
import time
app = Flask(__name__)

def formatTime(txt):
    timearray = time.localtime(txt)
    result = time.strftime("%Y-%m-%d %H:%M:%S", timearray)
    return result

然后我们去子模块中导入这个模块的函数

from advtools.common import formatTime

这里的advtools是一个目录,之前说了的,因为目录下面创建了一个__init__.py,那么这个就变成一个模块

我们导入之前的formatTime方法

还要导入jijia2的模版模块

import jinja2

最后将自定义过滤器添加到jijia2模块中并重新定义一个名字

jinja2.filters.FILTERS['format_time'] = formatTime

最后我们去模版文件中,找到需要转换或者处理的数据

{{ p.timestamp }}
改为
{{ p.timestamp | format_time }}


我我整段代码都复制上来供大家参考下

模型代码

#!/usr/bin/python3
#coding:utf-8
__author__ = 'yang.su'

from flask import Flask,Blueprint,render_template,url_for,request,jsonify
from pymongo import MongoClient
from advtools.common import formatTime
import urllib.request as rq
import json
import jinja2
app = Flask(__name__)
app.config.from_pyfile('../settings.py')
fptools = Blueprint('advtools', __name__, url_prefix='/pt')
jinja2.filters.FILTERS['format_time'] = formatTime

@fptools.route('/serby')
def serby():
    client = MongoClient(host=app.config.get('HOST'), port=app.config.get('MONGO_PORT'))
    db = client[app.config.get('MONGODB_NAME')]
    coll = db['man']
    result = coll.find({ "id":{ "$gte": 0} })
    return render_template('serby.htidml', serby=result)

过滤器代码

#!/usr/bin/python3
#coding:utf-8
__author__ = 'yang.su'

from flask import Flask
import time
app = Flask(__name__)

def formatTime(txt):
    timearray = time.localtime(txt)
    result = time.strftime("%Y-%m-%d %H:%M:%S", timearray)
    return result

模版代码

{% for p in serby %}
<tr>
<td>{{ p.camera_id }}</td>
<td>{{ p.quality | round(2, 'floor') }}</td>
<td><a class="layui-badge layui-bg-cyan" href="javascript:;" title="">查看</a> <a class="layui-badge layui-bg-cyan" href="javascript:;" title="">查看</a></td>
<td>{{ p.picture_md5 }}</td>
<td>{{ p.timestamp | format_time }}</td>
</tr>
{% endfor %}


内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://sulao.cn/post/551.html

我要评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。