查了很多文档,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 %}