【问题标题】:Flask - set URL for fileFlask - 为文件设置 URL
【发布时间】:2015-11-07 14:13:01
【问题描述】:

我在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/”并填写表格并查看数据,但如果不刷新页面,我将无法再次这样做。

你知道我要做什么吗?

【问题讨论】:

    标签: python html web-applications flask


    【解决方案1】:

    一个更简单的例子(没有数据库的东西)。

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

    【讨论】:

      猜你喜欢
      • 2023-03-29
      • 2021-10-21
      • 1970-01-01
      • 2014-01-08
      • 2017-08-10
      • 1970-01-01
      • 2020-10-26
      • 2016-01-30
      • 1970-01-01
      相关资源
      最近更新 更多