如何将数据从烧瓶发送到 html 模板

Posted

技术标签:

【中文标题】如何将数据从烧瓶发送到 html 模板【英文标题】:How to send data from flask to html template 【发布时间】:2017-12-26 21:08:15 【问题描述】:

我有一个小型应用程序,其中从用户那里获取输入,并根据它在 html 上显示数据。我必须从烧瓶中发送数据以显示在 html 上,但找不到方法。我没有遇到任何错误。

[更新]: Python 脚本:

    from flask import Flask, render_template, request
    import random

    app = Flask(__name__, template_folder='templates')

    @app.route('/', methods=['GET','POST'])
    def samplefunction():
        if request.method == 'GET':
            return render_template('new.html')
        if request.mthod == 'POST':
            greetIn = ['hey', 'hi', 'hey there', 'hi there', 'hello', 'hola', 'yoo']
            byeIn = ['bye', 'see you later', 'catch you later', 'toodles']
            nameOut = ['my name is Fatty!!', 'Fatty is my name', 'you can call me Fatty', 'I go by the name of Fatty']
            greetOut = ['hey there!', 'hi!', 'hi there!', 'hey!']
            byeOut = ['bye bye', 'bye. see you later']

            human1 = request.form['human']

            if human1 in greetIn:
                bot = random.choice(greetOut)
                return render_template('new.html', bot=bot)
            else:
                bot = 'Sorry..no idea!!!'
                return render_template('new.html', bot=bot)

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

HTML 代码:

<html>
  <head>
    <title>BOT</title>
    <script>
        var bot =  bot 
    </script>
  </head>
  <body>
      <h1>Hello, type something to begin!</h1>
      <form method='post'>
        Human: <input type='text' name='human'><br>
        Bot:  bot <br>
        <input type="submit" name="action">
      </form>
  </body>
</html>

任何帮助将不胜感激。

谢谢!

【问题讨论】:

这对我来说是正确的。它用什么代替 bot bot = random.choice(greetout) 是它在您的代码中的实际样子吗?你从来没有在out 中用小写的o 声明变量。虽然我希望这会引发错误...... 如上所述,一旦您将变量更改为greetOut,它应该可以工作 @CoryMadden Ohh..没有看到它..但它仍然无法正常工作。页面只是刷新而不写任何东西来代替 bot 【参考方案1】:

问题

由于初始 return 语句,您的函数 samplefunction() 始终呈现不包含变量的 new.html

def samplefunction():
    return render_template('new.html')

修复

您需要添加if request.method == 'GET':if request.method == 'POST':,然后您的代码才能运行。并将变量名称更改为@Harrison 建议的另一个答案:bot = random.choice(greetOut) 而不是bot = random.choice(greetout)

更新代码

def samplefunction():
    if request.method == 'GET':
        return render_template('new.html')
    if request.method == 'POST':
        greetIn = ['hey', 'hi', 'hey there', 'hi there', 'hello', 'hola', 'yoo']
        byeIn = ['bye', 'see you later', 'catch you later', 'toodles']
        nameOut = ['my name is Fatty!!', 'Fatty is my name', 'you can call me Fatty', 'I go by the name of Fatty']
        greetOut = ['hey there!', 'hi!', 'hi there!', 'hey!']
        byeOut = ['bye bye', 'bye. see you later']
        human1 = request.form['human']
        if human1 in greetIn:
            bot = random.choice(greetOut)
            return render_template('new.html', bot=bot)
        else:
            render_template('new.html')

if __name__ == "__main__":
    app.run(host='0.0.0.0', port=8080, debug=True)

【讨论】:

它仍然无法正常工作...只需在每次单击按钮时渲染 new.html 而不使用变量 那您没有正确复制,因为您的代码确实有效,我得到了预期的结果。你确定你已经完全复制了代码吗?在@app.route('/', methods=['GET','POST']) 之后def samplefunction() 的定义需要和我上面写的完全一样,你的代码也能做你想做的事。机器人响应将写入您的 html 页面,以代替以下行中的变量 bot Bot: bot &lt;br&gt; 您确实知道需要在human 文本框中输入文本,并且输入需要匹配来自greetIn 列表的字符串之一,对吧?我以为你会知道,因为这是你的代码。您不能输入 monkey brain 并期望得到机器人的答案...此外,if __name__ == "__main__": 语句取决于您的环境,应该根据您的需要进行配置。我假设您知道,因为您至少能够在没有机器人响应的情况下呈现 new.html 页面......请给我更新或发布您的错误消息,我会帮助您解决问题。跨度> 以下是我的文件夹的结构:/bot --- /new1.py /templates -- new.html 我已正确复制您的代码并在if __name__ == "__main__": app.run(debug=True) 中进行了一次更改,然后在进入 /bot 文件夹后在 cmd 中运行以下命令:set FLASK_APP=new1.pyflask run 我没有收到任何错误消息或任何内容,页面只是在没有变量的情况下单击按钮后重新加载。 嘿,成功了!!!我再次安装了 Flask 和虚拟环境,然后它就像一个魅力!谢谢你:) :)【参考方案2】:

greetOut = ['hey there!', 'hi!', 'hi there!', 'hey!'] 0ut

bot = random.choice(greetout) out

除此之外,您的模板看起来还不错。如果你更正你的大写,它应该可以工作。


此外,这不是强制性的,但您不妨将 Flask 导入压缩为 1 行,如下所示: from flask import Flask, render_template, request

【讨论】:

这样做了,但仍然无法正常工作。该页面仅在单击按钮时刷新,并且没有任何内容代替 bot

以上是关于如何将数据从烧瓶发送到 html 模板的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Reactjs fetch 将 POST 数据发送到烧瓶

烧瓶框架可以将实时数据从服务器发送到客户端浏览器吗?

如何将 GET 请求从我的烧瓶应用程序发送到另一个站点?

如何通过 url 将数据从 python 文件发送到位于单独项目中的 html 文件(没有 html 作为模板)

如何将网络摄像头帧从客户端发送到烧瓶服务器?

如何将烧瓶应用程序发送到 AWS Elastic Beanstalk?