url_for在不同的Flask实例中

时间:2015-03-23 21:02:05

标签: python flask wsgi

我有一个复杂的烧瓶应用程序,其中有几个由werkzeug中间件调度的Flask实例。在这种情况下,我有两个问题,实际上与url_for无关,但实际上是烧瓶上下文管理。

1)如何从一个应用程序创建URL到另一个应用程序?

2)主要一个 - 如何为没有app_context的特定应用程序创建URL。例如,我需要在导入时或从芹菜任务创建一些URL。我试图在所有应用程序实例上做包装,并重新定义url_for,如

def url_for(self, *args, **kwargs):
    with self.app.app_context():
        return url_for(*args, **kwargs)

但刚收到以下错误 “应用程序无法为请求独立的URL生成创建URL适配器。您可以通过设置SERVER_NAME配置变量来解决此问题。” 有什么建议吗?

更新:我的第二个问题的解决方案是正确的,只需要添加SERVER_NAME,但第一个仍然是打开的

1 个答案:

答案 0 :(得分:1)

我最终为每个应用程序创建了分隔的URL构建器

absolute_url_adapter = app.url_map.bind_to_environ({
    'wsgi.url_scheme': 'http',
    'HTTP_HOST': app.config['SERVER_NAME'],
    'SCRIPT_NAME': app.url_prefix,
    'REQUEST_METHOD': 'GET',
})

url_prefix - 是调度程序调度请求的网址

然后在每个应用程序中使用它

absolute_url_adapter.build('main.main', force_external=True)