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})