我喜欢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的映射。
我遇到的问题是我想在我的前端模板中使用url_for()
来获取api中的方法,但是还没有找到一种方法来实现这一点。对URL路径进行硬编码可以正常工作,但如果我想移动它,将会导致问题。
答案 0 :(得分:0)
你可以做的是向你的后端添加一条新路线,比如/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功能共享。