【问题标题】:How do I render two HTML pages using the same information in Flask?如何在 Flask 中使用相同的信息呈现两个 HTML 页面?
【发布时间】:2020-05-19 11:15:16
【问题描述】:

在 Flask 的dashboard() 函数中,给用户一个要填写的搜索表单,填写表单后,他会得到他搜索的一些书籍的名称。在点击一本书的标题时,他应该会被引导到一个 HTML 页面,在那里他可以获得有关该书的一些信息。

@app.route('/dashboard', methods=['GET','POST'])
def dashboard():
    form = SearchForm()

    if form.validate_on_submit():
        if form.ISBN.data:
            results = Books.query.filter(Books.ISBN.like('%' + form.ISBN.data + '%')).all()
        elif form.Title.data:
            results = Books.query.filter(Books.Title.like('%' + form.Title.data + '%')).all()
        return render_template('search_results.html', name=current_user.username, form = form, results=results)

    return render_template('dashboard.html', name=current_user.username, form = form)

在上述函数中,SearchForm 是一个 WTF 烧瓶形式。

这是我的 search_results.html 中的代码:

{% for result in results: %}
   {{result.ISBN}}
   <a href="{{url_for('details')}}">{{result.Title}}</a> 
{%endfor%}

这是我的详细信息功能:

@app.route('/dashboard/details', methods = ['GET', 'POST'])
def details():
    if request.method == 'POST':
        return render_template('details.html')
    return render_template('details.html')

我想要的是,获取用户在 dashboard() 函数中填写的表单数据,并在 details() 函数中使用该数据将该信息传递到 details.html 页面,我将在该页面打印用户填写的数据,以及存储在数据库中的图书数据。
但我不知道该怎么做。
我尝试使用global form = SearchForm() 将表单设为全局,但这给了我一个语法错误:

global form = SearchForm()
                ^
SyntaxError: invalid syntax

任何帮助将不胜感激。

【问题讨论】:

    标签: html database flask flask-sqlalchemy flask-wtforms


    【解决方案1】:

    您可以将参数传递给 'url_for' 函数,这些参数也称为 url 参数,通常使用 ID。例如:

    {{ url_for('details', book_id=res.id) }}
    

    那么你将能够获得传递的参数,例如:

    @app.route('/dashboard/details/<int:book_id>')
    def details(book_id):
    

    但是,如果您的标题是唯一的,并且您使用它们查询数据,那么您也可以完全将它们用作参数。

    【讨论】:

      【解决方案2】:

      您可以使用烧瓶会话全局变量来满足您的目的。请参考:https://flask.palletsprojects.com/en/1.1.x/api/#flask.session

      这是一个很好的教程,其中包含有关如何使用flask session 全局变量的更详细信息: https://www.javatpoint.com/flask-session

      【讨论】:

        【解决方案3】:

        您可以将数据传递到 url_for 函数,只需添加一个逗号并将数据放在逗号之后(就像您在 render_template 中所做的那样) 所以你需要做的是在你的html中

        {{ url_for('details', book_id=res.id) }}
        

        这在你的路线中

        @app.route('/dashboard/details/<int:book_id>')
        def details(book_id):
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-11-18
          • 2014-02-20
          • 2022-10-04
          • 2020-09-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多