我需要使用url_for()
函数将参数传递给路由,而redirect()
我也想这样做。但是,我得到了TypeError: book() missing 1 required positional argument: 'book_title'
,我知道我的代码中的book_title
函数未接收到参数book()
,这就是错误的原因。但是,我不知道幕后出了什么问题。
这些是我的路线
@app.route('/search/<title>/',methods=['GET','POST'])
def btitle(title):
book_title = db.execute("SELECT title,author,isbn from books WHERE (title LIKE :title)",params={"title":title}).fetchall()
if request.method == 'GET':
#book_title = db.execute("SELECT title,author,isbn from books WHERE (title LIKE :title)",params={"title":title}).fetchall()
if book_title:
return render_template("booktitle.html",book_title=book_title)
else:
return render_template("error.html")
else:
#book_title = db.execute("SELECT title,author,isbn from books WHERE (title LIKE :title)",params={"title":title}).fetchall()
if book_title:
return redirect(url_for("book",book_title=book_title))
@app.route('/books',methods=['GET','POST'])
def book(book_title):
if request.method == 'GET':
return render_template("individualbook.html",book_title=book_title)
而且,这是我的booktitle.html
{% extends "layout.html" %}
{% block title %}
{{ book }}
{% endblock %}
{% block body %}
<h1>Search results</h1>
<ul>
{% for book in book_title %}
<li>
<a href="{{ url_for('book') }}">
{{ book }}
</a>
</li>
{% endfor %}
</ul>
{% endblock %}
答案 0 :(得分:0)
您的问题是book
路由未获得预期的参数book_title
。
这是因为您正在这样定义它:
@app.route('/books',methods=['GET','POST'])
def book(book_title)
在烧瓶中,如果希望视图函数采用参数,则需要在路径中包括它们。在您的示例中,它可能看起来像这样:
@app.route('/books/<book_title>',methods=['GET','POST'])
def book(book_title)
如果您未在路由中放置<book_title
,flask将无法向book_title
函数提供book
参数,这将告诉您错误。