Python 如何有条件地从冷冻烧瓶中导入相对url
我正在创建一个网站使用,我想冻结使用,但也有现场运行的网站 只有在冻结站点时,我才遵循并将Python 如何有条件地从冷冻烧瓶中导入相对url,python,flask,Python,Flask,我正在创建一个网站使用,我想冻结使用,但也有现场运行的网站 只有在冻结站点时,我才遵循并将FREEZER\u RELATIVE\u urlconfig选项设置为True。此功能正常运行,在模板引擎中将的url\u替换为的相对url\u 如何让它仅在设置了配置选项的情况下,才在Python代码中为使用relative\u url\u 我想我需要像这样的东西: if config['FREEZER_RELATIVE_URLS']: from flask_frozen import relat
FREEZER\u RELATIVE\u url
config选项设置为True
。此功能正常运行,在模板引擎中将的url\u替换为
的相对url\u
如何让它仅在设置了配置选项的情况下,才在Python代码中为
使用relative\u url\u
我想我需要像这样的东西:
if config['FREEZER_RELATIVE_URLS']:
from flask_frozen import relative_url_for as url_for
else:
from flask import url_for
但是,如果我尝试使用我的视图.py中的其他导入访问flask.current_app.config
,我会得到一个错误:运行时错误:在应用程序上下文之外工作
您尝试在视图之外访问current_app
,因此,没有应用程序上下文来告诉Flask当前的应用程序指向什么。创建一个助手函数,该函数将在调用url函数时选择要调用的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\u用于视图中的
helper,而不是其他两个函数。您还可以使用此函数替换Jinja模板中使用的
函数的url\u
# during app creation
from helpers import url_for
app.add_template_global(url_for)
app.context_processor(lambda: {'url_for': url_for})