如何在jinja模板的url_for函数中包含表单值?

时间:2017-10-01 05:06:15

标签: python flask jinja2

我想将选定的{{ exam[0] }}传递给show_exam_form函数。 但是我做不到。

环境

Python 3.6.1
Flask==0.12.2
Jinja2==2.9.6

app.py

@app.route('/exam/<int:exam_id>', methods=['POST'])
def show_exam_form(exam_id):
    print(exam_id)

html

<form action="{{ url_for('show_exam_form', exam_id=exam_id) }}" method='POST'>
  <select name=exam_id>
    {% for exam in exams %}
    <option value="{{exam[0]}}">{{exam[1]}}</option>
    {% endfor %}
  </select>

我该如何解决? 如果您需要更多信息来解决,请告诉我 谢谢!!!

2 个答案:

答案 0 :(得分:1)

不需要将id作为参数。以下是如何为将来的OP处理此选定值的示例。

app.py

@app.route('/exam', methods=['GET','POST'])
def show_exam_form():
    exams = {
        "IT-101":"IT Fundamentals",
        "IT-201": "Object Oriented Programming",
        "IT-301": "Database Management",
        "IT-401": "Operating Systems"
    }
    if request.method == "GET":
        return render_template('so.html', exams = exams)
    else:
        exam_id = request.form["exam_id"]
        flash(exam_id)
        return render_template('so.html', exams = exams)

so.html模板中(在我的情况下,它扩展了一个基础模板):

{% extends "layout.html" %}
{% block content %}
    <form action="{{ url_for('show_exam_form') }}" class="form" method='POST'>
        <div class="form-group">
            <select name="exam_id" class="form-control">
                {% for key,value in exams.items() %}
                    <option value="{{ key }}">{{ value }}</option>
                {% endfor %}
            </select>
        </div>
        <input type="submit" class="btn btn-primary" value="Submit">
    </form>
{% endblock %}

输出:

Input Form 图1:输入表格

enter image description here 图2:闪烁所选值

答案 1 :(得分:0)

我不需要将jinja的exam_id发送给Flask 只需通过POST发送并通过show_exam_form函数中的request.form ['exam_id']获取。