我正在学习Flask,我被困在这里。
如何为带有参数(parameter)的搜索结果建立链接?
我的应用搜索书籍,并仅使用Flask和Jinja2将书籍呈现在HTML页面上。
所以我的HTML仅具有此功能:
<ul>
{% for x in lk1 %}
<li><a href="{{ url_for('bookPage'}}">{{ x[2] }} (by) {{ x[3] }} (year) : {{ x[4] }}</a></li>
{% endfor %}
</ul>
其中
lk1
是Flask从SQL收集的书籍清单 和x
是来自SQL数据库的原始信息
页面bookpage.html
中的内容为空,我需要传递带有URL的参数,以便可以在页面上呈现它们或获取有关此书的其余信息,也可以在书本页面中呈现它,如果可以的话我了解如何根据我的代码将书名的网址设为{{ x[2] }}
我看到ppl做着<url_titl>
之类的事情,但我不知道它是如何工作的
谢谢!
答案 0 :(得分:0)
我认为,您必须学习有关使用flask和jinja创建变量url的信息。
可变网址示例。
HTML
<ul>
{% for x in lk1 %}
<li><a href="{{ url_for('bookPage', title=x[2] }}">{{ x[2] }} (by) {{ x[3] }} (year) : {{ x[4] }}</a></li>
{% endfor %}
</ul>
Python
@app.route('/books/<title>' )
# the name of this function have to be used in
# url_for ('nameOfFunction', name_of_variable_part_of_url=some_internal_variable)
def bookPage(title):
# code, that will creat yourlist
# book.html - template for book
# listofvariables - variables for book's page
#
return render_template ("book.html", listofvariables=yourlist)
链接到类似问题:Reference template variable within Jinja expression
更新:要在网址中使用许多变量,您必须更改html和python。
HTML:
<a href="{{ url_for('bookPage', title=x[2], heading=x[3]) }}">all your text </a>
Python:
@app.route('/books/<title>-<heading>' )
def bookPage(title, heading):
答案 1 :(得分:0)
@app.route('books', methods=['GET', 'POST')
def books():
book_list = Book.query.all()
return render_template('books.html', book_list=book_list)
模板;
<ul>
{% for x in book_list %}
<li><a href="{{ url_for('bookpage', title=x.title, book_id=x.id }}">{{ x.title }} (by) {{ x.author }} (year) : {{ x.year }}</a></li>
{% endfor %}
</ul>
要获取带有标题的网址,您的查看功能应如下所示。书id
很重要,因为书可以具有相同的标题,因此不能用作唯一的标识符。
@app.route('bookpage/<int:book_id>/<string:title>', methods=['GET', 'POST')
def bookpage(title=None, book_id=None):
我建议您使用Flask-SQLAlchemy并将Book作为对象,如下所示,您将能够访问Jinja模板中显示的属性。
class Book(db.Model):
id = db.Column(db.Integer, db.ForeignKey)
title = db.Column(Text)
author = db.Column(Text)
如果您要访问书籍页面,则可以使用“一对多”的书籍和页面模型,即,如果您要上载内容,则一本书可以包含许多页面。