Flask - 使用html中的参数生成url

时间:2014-12-20 22:35:13

标签: python flask

我试图找到如何将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表单与上述函数进行通信。

1 个答案:

答案 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。