我有一个复杂的烧瓶应用程序,其中有几个由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,但第一个仍然是打开的
答案 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)