我试图找到如何将URL参数(而不是请求)传递到url_for
函数,但我找不到它。在以下示例中,我需要通过表单传递q_id
,就像我使用incrRight
一样。那么,在这种情况下,如何在url_for
中包含变量呢?
<form action="{{url_for('answer',q_id='5495eb77433f064294361ceb')}}" method="post">
<input type="text" name="incrRight" value="0">
<input type="submit"/>
</form>
这就是我在控制器上的内容:
@app.route('/api/v1.0/question/<string:q_id>/answer', methods = ['POST'])
def answer(q_id):
incrRight = request.form.get('incrRight')
. . .
我需要通过传递q_id和incrRight参数来使用我的html表单与上述函数进行通信。
答案 0 :(得分:1)
您可以添加更多<input>
代码来添加其他表单参数。如果表单的用户不应该更改项目,请使用<input type="hidden">
元素:
<form action="{{ url_for('answer') }}" method="post">
<input type="text" name="incrRight" value="0" />
<input type="hidden" name="q_id" value="5495eb77433f064294361ceb" />
<input type="submit"/>
</form>
此确实要求在没有answer()
参数的情况下调用q_id
视图,当然:
@app.route('/api/v1.0/question/answer', methods=['POST'])
@app.route('/api/v1.0/question/<string:q_id>/answer', methods = ['POST'])
def answer(q_id=None):
if q_id is None:
q_id = request.form['q_id']
incrRight = request.form.get('incrRight')
此处,URL中缺少q_id
参数表示浏览器在POST主体中包含问题ID。
另一个选项是您编写JavaScript代码,该代码将根据表单中的action
字段调整表单q_id
参数,但这需要您的访问者启用JavaScript。