我在Flask
创建了一个简单的应用。当用户填写表单时,在index.html
中它返回results.html
模板,该模板与索引非常相似,但结果在此处返回(结果是使用表单找到的数据库中的数据)。
我想让“results.html”能够接收数据,这样我就可以填写表格,查看结果并再次填写表格......等等。
问题是我不知道如何设置“results.html”来接收这些数据,因为当它们被渲染时,仍然有“http://127.0.0.1:5000/”没有任何后缀 - results.html或者其他什么因此我无法分配与输入一起使用的功能。
@app.route('/results.html' ....
代码:
# -*- coding: utf-8 -*-
from flask import request,render_template,Flask
from databases import db_manager
app = Flask(__name__)
app.config.from_object(__name__)
def is_instance(a):
return isinstance(a,basestring)
app.jinja_env.globals.update(is_instance=is_instance)
@app.route('/', methods=['GET', 'POST'])
# @app.route('/index', methods=['GET', 'POST'])
def index():
if request.method == 'POST':
query = request.form['query']
if query.isdigit():
_data = db_manager.manager().get_subject_by_ICO(query)
else:
_data = db_manager.manager().get_subject_by_name(query)
else:
return render_template('index.html')
return render_template('results.html', data = _data)
if __name__ == '__main__':
app.run(debug=True)
现在,我可以转到:“http://127.0.0.1:5000/”并填写表单并查看数据,但如果不刷新页面,我就无法再次执行此操作。
你知道我该做什么吗?
答案 0 :(得分:0)
一个更简单的例子(没有数据库的东西)。
<强> app.py 强>
# -*- coding: utf-8 -*-
from flask import Flask, request, render_template
app = Flask(__name__)
@app.route('/', methods=['GET', 'POST'])
def index():
if request.method == 'POST':
query = request.form['query']
_data = 'querying "{q}"'.format(q=query)
return render_template('results.html', data=_data)
return render_template('index.html')
if __name__ == '__main__':
app.run(debug=True)
<强>的index.html 强>
<form action="" method="post">
<input type="text" name="query">
<input type="submit" value="Query">
</form>
{% block results%}
{% endblock %}
<强> results.html 强>
{% extends "index.html" %}
{% block results%}
{# only rendering data here #}
{{ data }}
{% endblock %}
但现在您需要解决其他问题 - 重新加载页面会再次发送POST
个请求。您需要使用 Post/Redirect/Get pattern 。
<强> app.py 强>
# -*- coding: utf-8 -*-
from flask import Flask, request, session, render_template, redirect, url_for
app = Flask(__name__)
app.config['SECRET_KEY'] = 'hard to guess string'
@app.route('/', methods=['GET', 'POST'])
def index():
if request.method == 'POST':
query = request.form['query']
_data = 'querying "{q}"'.format(q=query)
session['data'] = _data
return redirect(url_for('index'))
return render_template('index.html',
data=session.get('data'))
if __name__ == '__main__':
app.run(debug=True)
<强>的index.html 强>
<form action="" method="post">
<input type="text" name="query">
<input type="submit" value="Query">
</form>
{% block results%}
{{ data }}
{% endblock %}