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的时候用?

阅读 3.9k
1 个回答
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
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进