【问题标题】:How can I include form value in url_for function from jinja template? [duplicate]如何在 jinja 模板的 url_for 函数中包含表单值? [复制]
【发布时间】:2017-10-01 05:06:15
【问题描述】:

我想将选定的{{ 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>

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

【问题讨论】:

    标签: python flask jinja2


    【解决方案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 %}
    

    输出:

    图 1:输入表单

    图 2:闪烁选定的值

    【讨论】:

    • 是的!我注意到发布后没有必要。但你给了我一个很好的例子。谢谢!!!
    【解决方案2】:

    我不需要将考试 ID 从 jinja 发送到 Flask。
    只需通过 POST 发送并在 show_exam_form 函数中使用 request.form['exam_id'] 获取它。

    【讨论】:

      猜你喜欢
      • 2015-05-22
      • 2010-10-06
      • 2014-07-22
      • 1970-01-01
      • 1970-01-01
      • 2015-11-02
      • 1970-01-01
      • 2018-03-05
      • 2019-08-24
      相关资源
      最近更新 更多