【问题标题】:Returning an input sentence on html with Flask and Python使用 Flask 和 Python 在 html 上返回输入语句
【发布时间】:2020-09-26 00:12:36
【问题描述】:

我对 Flask 完全陌生,所以我现在只是在尝试。我只是想从用户界面中读取一个句子,然后返回该句子。但是,我得到了错误:

BadRequestKeyError(key)

我的代码如下:

from flask import Flask, render_template, request, redirect

app = Flask(__name__)

@app.route('/')
def index():
    return render_template('index.html')


@app.route('/query', methods=['GET', 'POST'])
def do_query():
    query = request.form['query']
    if request.method == 'POST':
        return redirect('/query')
    else:
        return render_template('query.html', query=query)

if __name__ == '__main__':
    app.run(debug=True)

而query.html是这样的:

{% extends 'base.html' %}
{% block body%}
    <form action="/query" method=”POST”>
        <label> Enter your Query Sentence: </label>
        <input type=”text” name=”query” id="query" >
        <input type="submit" value="Submit">
    </form>

    <p>Here is your sentence: {{query}}</p>

{% endblock %}

我认为问题可能是查询变量未初始化,但我不知道如何修复它。谁能帮我?

【问题讨论】:

  • 感谢您的回复。我现在明白了,问题确实是当方法不是“POST”时没有 request.form() 方法。但是,我仍在为实施而苦苦挣扎。他们在帖子中使用了'Post(...).save'命令。我真的不明白那里发生了什么,他们也没有将变量传递给解决方案中的html。
  • 那么,当第一次加载表单时,您希望query 变量是什么?你必须简单地指定一些东西,因为没有表单提交来获取它。
  • 我只想在第一次加载时显示输入行,并且只有在输入查询之后我想另外返回查询。

标签: python html flask request


【解决方案1】:

解决方案:

代码不起作用,因为我在 html 文件中使用了错误的引号。默认情况下,html 选择正确的引号(至少在 PyCharm 中),不可能犯任何错误。但是,我从 stackoverflow 源中复制了 html 代码。一旦我解决了这个问题,@Amitai Irron 提供的答案就起作用了:)

【讨论】:

    【解决方案2】:

    如果你这样重写你的路线:

    @app.route('/query', methods=['GET', 'POST'])
    def do_query():
        query = request.form['query'] if request.method == 'POST' else ''
        return render_template('query.html', query=query)
    

    您不会尝试访问不存在的请求数据(即,form 非 POST 请求的数据)。这意味着当您第一次导航到 /query 页面时,模板将显示如下内容:

    Here is your sentence:
    

    (即,query 没有值)

    但是,错误的请求类型问题将消失,冗余重定向也将消失。尽量减少重定向的使用,因为它们会显着减慢交互并损害用户体验。

    【讨论】:

    • 感谢您的回答。我通过初始化query = ' ' 尝试了类似的方法。不幸的是,当我输入查询时,它总是返回' '。与您提供的代码相同。也许我的 html 有问题?
    • 您的评论有点难以理解,因为我不知道确切代码是什么。在我的代码中,python 变量 query 只分配给一次,要么分配给来自表单的数据(如果是 POST 请求),要么分配给默认的空值。至于您的 HTML,我看不出它有任何问题(我也没有在可以重现您的代码的环境中,所以我的建议是有一定道理的)。
    • 实际上我发布的代码就是我目前所拥有的所有代码,因为我正在尝试解决这个确切的问题。我认为问题是,当我在 POST 请求时分配的任务会在显示 html 时再次被 ' '覆盖。
    • 如果你有机会请帮助我,这完全让我发疯,为什么这不起作用我正在尝试 5 个小时! :(
    • 我发现了这个问题:我使用了错误的 " ""POST"name=query"...我不敢相信这真的会有所作为 - 经验教训。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-17
    • 2021-09-01
    • 2019-04-20
    • 2018-10-29
    • 2018-09-26
    • 1970-01-01
    • 2012-11-19
    相关资源
    最近更新 更多