如何将数据从烧瓶发送到 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 <br>
。
您确实知道需要在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.py
和 flask 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 数据发送到烧瓶