如何在 Flask 中使用相同的信息呈现两个 HTML 页面?
How do I render two HTML pages using the same information in Flask?
在 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 flask 表单。
这是我的代码 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
如有任何帮助,我们将不胜感激。
您可以将参数传递给'url_for' 函数,也称为url 参数,通常使用ID。例如:
{{ url_for('details', book_id=res.id) }}
那么您将能够获得传递的参数,例如:
@app.route('/dashboard/details/<int:book_id>')
def details(book_id):
但是,如果您的标题是唯一的,并且您使用它们查询数据,那么您也完全可以将它们用作参数。
您可以使用 flask 会话全局变量来满足您的目的。请参考:https://flask.palletsprojects.com/en/1.1.x/api/#flask.session
这是一个很好的教程,其中包含有关如何使用 flask session
全局变量的更详细信息:
https://www.javatpoint.com/flask-session
您可以将数据传递到 url_for 函数,只需添加一个逗号并将数据放在逗号之后(就像您在 render_template 中所做的那样)
所以你需要做的是在你的 html
{{ url_for('details', book_id=res.id) }}
这在你的路线中
@app.route('/dashboard/details/<int:book_id>')
def details(book_id):
在 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 flask 表单。
这是我的代码 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
如有任何帮助,我们将不胜感激。
您可以将参数传递给'url_for' 函数,也称为url 参数,通常使用ID。例如:
{{ url_for('details', book_id=res.id) }}
那么您将能够获得传递的参数,例如:
@app.route('/dashboard/details/<int:book_id>')
def details(book_id):
但是,如果您的标题是唯一的,并且您使用它们查询数据,那么您也完全可以将它们用作参数。
您可以使用 flask 会话全局变量来满足您的目的。请参考:https://flask.palletsprojects.com/en/1.1.x/api/#flask.session
这是一个很好的教程,其中包含有关如何使用 flask session
全局变量的更详细信息:
https://www.javatpoint.com/flask-session
您可以将数据传递到 url_for 函数,只需添加一个逗号并将数据放在逗号之后(就像您在 render_template 中所做的那样) 所以你需要做的是在你的 html
{{ url_for('details', book_id=res.id) }}
这在你的路线中
@app.route('/dashboard/details/<int:book_id>')
def details(book_id):