Flask - 设置文件

时间:2015-11-07 14:13:01

标签: python html web-applications flask

我在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/”并填写表单并查看数据,但如果不刷新页面,我就无法再次执行此操作。

你知道我该做什么吗?

1 个答案:

答案 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 %}