如果使用多个路由,url_for 将变量映射到 URL 的问题
Issue with url_for mapping variables to URL if multiple routes are used
我遇到了 url_for
的问题,它不会自动将变量直接重新映射到 URL,因为有两条路线。
我的用例是一个 API,其中创建一个对象将 return 与 GET 命令 运行 相同的数据。
下面是代码示例:
@app.route('/test', methods=['POST'])
@app.route('/test/<string:name>', methods=['GET'])
def test(name=None):
if request.method == 'POST':
return redirect(url_for('test', name='xyz'))
return name
如果第一个 app.route
被删除,那么 url_for('test', name='xyz')
将正确 return "test/xyz"
.
但是,对于 app.route
两行,它 returns "test?name=xyz"
。这会导致 name
变为 None
,其中变量实际位于 request.args['name']
.
我不想做 if name is None: name=request.args.get('name')
,那么有什么方法可以强制它只查看使用 GET
方法的路由吗?我现在的情况很简单,我可以做到 url_for('test')+'/xyz'
,但似乎应该有更好的方法来做到这一点。
根据 Flask Docs,您可以使用 _method
参数指定要映射的方法。
flask.url_for(endpoint, **values)
您可以传递的值是:
- endpoint – URL(函数名称)
的端点
- values – URL 规则的可变参数
- _external – 如果设置为 True,将生成绝对 URL。服务器地址可以通过 SERVER_NAME 配置变量更改,该变量回退到主机 header,然后是请求的 IP 和端口。
- _scheme – 指定所需 URL 方案的字符串。 _external 参数必须设置为 True 或引发 ValueError。默认行为使用与当前请求相同的方案,如果没有可用的请求上下文,则使用应用程序配置中的 PREFERRED_URL_SCHEME。从 Werkzeug 0.10 开始,这也可以设置为空字符串以构建 protocol-relative URLs.
- _anchor – 如果提供,则将其作为锚点添加到 URL.
- _method – 如果提供,则明确指定 HTTP 方法。 <---- 这个
在 url_for 中指定 _method 参数,如下所示:
url_for('test', name='xyz', _method='GET')
我遇到了 url_for
的问题,它不会自动将变量直接重新映射到 URL,因为有两条路线。
我的用例是一个 API,其中创建一个对象将 return 与 GET 命令 运行 相同的数据。
下面是代码示例:
@app.route('/test', methods=['POST'])
@app.route('/test/<string:name>', methods=['GET'])
def test(name=None):
if request.method == 'POST':
return redirect(url_for('test', name='xyz'))
return name
如果第一个 app.route
被删除,那么 url_for('test', name='xyz')
将正确 return "test/xyz"
.
但是,对于 app.route
两行,它 returns "test?name=xyz"
。这会导致 name
变为 None
,其中变量实际位于 request.args['name']
.
我不想做 if name is None: name=request.args.get('name')
,那么有什么方法可以强制它只查看使用 GET
方法的路由吗?我现在的情况很简单,我可以做到 url_for('test')+'/xyz'
,但似乎应该有更好的方法来做到这一点。
根据 Flask Docs,您可以使用 _method
参数指定要映射的方法。
flask.url_for(endpoint, **values)
您可以传递的值是:
- endpoint – URL(函数名称) 的端点
- values – URL 规则的可变参数
- _external – 如果设置为 True,将生成绝对 URL。服务器地址可以通过 SERVER_NAME 配置变量更改,该变量回退到主机 header,然后是请求的 IP 和端口。
- _scheme – 指定所需 URL 方案的字符串。 _external 参数必须设置为 True 或引发 ValueError。默认行为使用与当前请求相同的方案,如果没有可用的请求上下文,则使用应用程序配置中的 PREFERRED_URL_SCHEME。从 Werkzeug 0.10 开始,这也可以设置为空字符串以构建 protocol-relative URLs.
- _anchor – 如果提供,则将其作为锚点添加到 URL.
- _method – 如果提供,则明确指定 HTTP 方法。 <---- 这个
在 url_for 中指定 _method 参数,如下所示:
url_for('test', name='xyz', _method='GET')