url_for在不同的Flask实例中

fre*_*use 5 python wsgi flask

我有复杂的烧瓶应用程序,有几个由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)
Run Code Online (Sandbox Code Playgroud)

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

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

fre*_*use 2

我最终为每个应用程序创建了单独的 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',
})
Run Code Online (Sandbox Code Playgroud)

url_prefix - 是 url,调度程序通过它调度请求

然后在每个应用程序中你都这样使用它

absolute_url_adapter.build('main.main', force_external=True)
Run Code Online (Sandbox Code Playgroud)