[英]How to import relative_url_for conditionally from Frozen-Flask
我正在使用Flask创建一个网站,我想使用Frozen-Flask将其冻结,但该网站也可以运行。
我已按照文档进行操作 ,仅在冻结站点时才将FREEZER_RELATIVE_URLS
配置选项设置为True
。 此功能正常,更换url_for
与relative_url_for
模板引擎。
仅当设置了配置选项时,如何才能在Python代码中使用relative_url_for
?
我想我需要这样的东西:
if config['FREEZER_RELATIVE_URLS']:
from flask_frozen import relative_url_for as url_for
else:
from flask import url_for
但是,如果我尝试用views.py
的其他导入访问flask.current_app.config
,则会收到错误消息: RuntimeError: working outside of application context
。
您正在尝试在视图外部访问current_app
,因此没有应用上下文可以告诉Flask current_app
指向什么。 创建一个辅助函数,该函数将选择在调用时调用哪个url函数,而不是在导入时确定。
from flask import current_app, url_for as live_url_for
from flask_frozen import relative_url_for
def url_for(endpoint, **values):
if current_app.config['FREEZER_RELATIVE_URLS']:
return relative_url_for(endpoint, **values)
return live_url_for(endpoint, **values)
在视图内部而不是其他两个函数中使用此url_for
帮助器。 您也可以使用此函数替换Jinja模板中使用的url_for
函数。
# during app creation
from helpers import url_for
app.add_template_global(url_for)
app.context_processor(lambda: {'url_for': url_for})
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.