python3.x - Python flask 的 jinja2 自定义过滤器的问题,求助

查看:170
本文介绍了python3.x - Python flask 的 jinja2 自定义过滤器的问题,求助的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

我看到网上有jinja2 自定义模板引擎的

app = Flask(__name__)

def json_dumps(dict):
        result = json.dumps(dict)
        return result

def typeFilter(arg):
        result = type(arg)
        return result

env = app.jinja_env
env.filters['json_dumps'] = json_dumps
env.filters['typeFilter'] = typeFilter

这样在前端就可以调用这个自动以的过滤器了

但是我是根据flasky的方式来return app的

def create_app():
    app = Flask(__name__)
    app.config.from_object(ListConfig)

    bootstrap.init_app(app)
    login_manager.init_app(app)
    mail.init_app(app)
    db.init_app(app)
    csrf.init_app(app)

    from .auth import auth as auth_blueprint
    app.register_blueprint(auth_blueprint, url_prefix='/auth')

    from .main import main as main_blueprint
    app.register_blueprint(main_blueprint)

    return app
    

现在就一脸懵逼不知道怎么简单的管理这个模板引擎

我把上面jinja2的内容全部放到这个def里面是可以用的。。但是怎么像这个单独return之后,我from xxx import xxx的时候用?

解决方案

def create_app():
    app = Flask(__name__)
    app.config.from_object(ListConfig)

    bootstrap.init_app(app)
    login_manager.init_app(app)
    mail.init_app(app)
    db.init_app(app)
    csrf.init_app(app)

    from .auth import auth as auth_blueprint
    app.register_blueprint(auth_blueprint, url_prefix='/auth')

    from .main import main as main_blueprint
    app.register_blueprint(main_blueprint)
    
    #: 注册自定义过滤器
    env = app.jinja_env
    env.filters['json_dumps'] = json_dumps
    env.filters['typeFilter'] = typeFilter

    return app

可以这样管理(未必是最优雅的)

#: filters.py

def json_dumps(dict):
    result = json.dumps(dict)
    return result


def typeFilter(arg):
    result = type(arg)
    return result
    
    
def a(items):
    return items
    
filters = [
    json_dumps,
    typeFilter,
    a
]

#: app.py

from filters import filters


def create_app():
    app = Flask(__name__)
    app.config.from_object(ListConfig)

    bootstrap.init_app(app)
    login_manager.init_app(app)
    mail.init_app(app)
    db.init_app(app)
    csrf.init_app(app)

    from .auth import auth as auth_blueprint
    app.register_blueprint(auth_blueprint, url_prefix='/auth')

    from .main import main as main_blueprint
    app.register_blueprint(main_blueprint)
    
    #: 注册自定义过滤器
    for func in filters:
        app.jinja_env_filter[func.__name__] = func

    return app

这篇关于python3.x - Python flask 的 jinja2 自定义过滤器的问题,求助的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆