【问题标题】:Using url_for between two applications在两个应用程序之间使用 url_for
【发布时间】:2015-07-18 14:54:12
【问题描述】:

我喜欢Overholt example 使用的很多约定,但遇到了一个特定问题。

我使用 werkzeug.wsgi 中的 DispatcherMiddleware 对象设置了两个应用程序:

from werkzeug.wsgi import DispatcherMiddleware
from myapp import api, frontend

application = DispatcherMiddleware(frontend.create_app(), {
    '/api': api.create_app()
})

这很好用;终点都在那里。检查application.app.url_map 显示前端的映射,application.mounts['/api'].url_map 正确显示 api 的映射。

我遇到的问题是我想在我的前端模板中为 api 中的方法使用 url_for(),但还没有找到一种方法来实现它。对 URL 路径进行硬编码是可行的,但如果我想移动内容,以后会出现问题。

【问题讨论】:

  • 通过调度程序运行的应用程序相互隔离。

标签: python flask werkzeug


【解决方案1】:

您可以在后端添加一条新路线,例如/api/route-map,它会输出路线的地图(字典/JSON)(您可以使用url_for 生成地图)并点击它从您的前端路由以获取动态路由图,您可以通过自定义 jinja2 函数(您可以按如下所示创建)在您的前端模板中使用它。

def api_url_for(route_fn_string):
    """
    This is just boilerplate code. Please do some checking here.
    '"""
    return route_map[route_fn_string]


app.jinja_env.globals.update(api_url_for=api_url_for)

现在您可以在您的 jinja2 模板中执行 {{api_url_for('update')}} 以获取其实际路线。

如果您将两个应用程序放在同一台服务器上,那么您可以简单地将路由映射共享为全局或通过 getter 函数。

【讨论】:

    猜你喜欢
    • 2018-04-19
    • 1970-01-01
    • 2020-10-08
    • 2011-02-08
    • 2013-04-22
    • 2020-05-23
    • 1970-01-01
    • 2015-12-12
    • 1970-01-01
    相关资源
    最近更新 更多