我有一个Python代码,正在使用Flask创建网页。在主页中,我正在填写一个表单,使用一个按钮提交,它会基于输入内容显示一个表格。
我遇到的问题是,一旦单击按钮提交表单,它就会在同一网页上呈现表格。我想使用JavaScriptwindow.open()或您可能建议的其他任何方法来创建一个新窗口,以将该表呈现在新窗口中,并使主页保持原样。我试着环顾四周,似乎什么也无法工作。我已经读完了这个问题和这个问题。但是这些建议似乎与我的需求不符。
这是我的代码:
Python代码
fromflaskimportFlask,render_template,request,app=Flask(__name__)defget_table(user_input):...returndict//returns list of dictionaries, for example...//dict = [{'name':'Joe','age':'25'},// {'name':'Mike','age':'20'},// {'name':'Chris','age':'29'}]@app.route("/")defhome():returnrender_template('home.html')@app.route("/table",methods=['POST'])deftable():user_input=request.form['input']dict_table=get_table(user_input)//return list of dictionariesreturnrender_template('table.html',dict_table=dict_table)if__name__=='__main__':app.run(debug=True)
home.html
HomepageInputClick Me!table.html
Table{% if dict_table %}{% for key in dict_table[0] %}{{ key }}{% endfor %}{% endif %}{% for dict in dict_table %}
{% for value in dict.values() %}{{ value }}{% endfor %}{% endfor %}有人可以清楚地说明我如何单击主页上的表单提交按钮,停留在主页home.html上,并使table.html中的表在新窗口中打开(可能使用window.open()JavaScript或其他方法) ?
如果有人可以指导我完成提供的代码的操作步骤,并特别向我展示在哪里调用函数之类的东西,我将不胜感激。我是新来瓶/ HTML / JS,我只是想学仅供个人使用,我得到的是只显示了如何在一个新的选项卡中显示如google.com一个URL,沮丧阅读链接和文档是不是我想要的谢谢!
解决方案
这里的关键概念是AJAX(异步JavaScript和XML)。简而言之,它是一种架构,可以在后台将请求发送到服务器(称为异步请求),然后根据从服务器接收到的结果修改Web浏览器当前显示的页面的内容,避免了以及服务器不会再次传输完整页面。
第二步:解决您的问题
首先我们写路线:
fromflaskimportFlask,render_template,request,app=Flask(__name__)user_input=Nonedefget_table(user_input):...returndict//returns list of dictionaries, for example...//dict = [{'name':'Joe','age':'25'},// {'name':'Mike','age':'20'},// {'name':'Chris','age':'29'}]@app.route('/')defhome():returnrender_template('home.html')@app.route('/_ajax_user_input')defajax_user_input():globaluser_input
user_input=request.args.get('user_input',0,type=int)return"ok"@app.route("/table")deftable():x=user_input
dict_table=get_table(x)//return list of dictionariesreturnrender_template('table.html',dict_table=dict_table)
在攻击模板之后:
home.html:
InputClick Me!
table.html:
{% if dict_table %}{% for key in dict_table[0] %}{{ key }}{% endfor %}{% endif %}
{% for dict in dict_table %}
{% for value in dict.values() %}{{ value }}{% endfor %}{% endfor %}基本上,这是发生了什么:
当我单击按钮时,我调用Javascript脚本:
$('.test').bind('click',function(){
This sends an ajax request to FLASK, which consists in executing the ajax_user_input() function:
$.getJSON($SCRIPT_ROOT+'/_ajax_user_input',
To this function I send a data (the value selected by the user in the select tag) and this data is stored in the variable user_input:
user_input:$('#input').val(),
On the side of Flask I get the data and I store it in a global variable that I named user_input too:
globaluser_input
user_input=request.args.get('user_input',0,type=int)
Then in my script I call a javascript method that allows me to open a url in a new tab (more details here):
window.open('http://127.0.0.1:5000/table','_blank');
The 'table' route, stores in the variable x the data previously stored in my global variable (user_input), then it calls the function get_table() (by passing him the variable x in parameter) which returns a list of the dictionaries, and finally it returns the page table.html with the list of the dictionaries in parameter:
x=user_input
dict_table=get_table(x)returnrender_template('table.html',dict_table=dict_table)
I hope this will help you, even though I am convinced that there are many other ways to do it, perhaps more effective.
站长简介:前每日优鲜python全栈开发工程师,自媒体达人,逗比程序猿,钱少话少特宅,关注我,做朋友, 我们一起谈人生和理想吧!我的公众号:想吃麻辣香锅
关注公众号回复充值+你的账号,免费为您充值1000积分