python-3.x - 如何将来自“从模板 A 到模板 B”的模板 B 中的变量硬编码传递给路由函数?
问题描述
我正在构建一个显示书籍列表的 Web 应用程序,用户单击一本书,然后他被定向到一本书,其中包含该书的另一个信息列表。Books.html 将用户重定向到 review.html,问题是 books.html 文件中的 url_for 函数没有按预期工作。
books.html 文件是 bootstrap 4 预定义列表,我只是链接到 href="{{url_for('review', book_id=book.id)}}"
@app.route("/books")
def books():
''' show books in a list. '''
# Select book info based on first characters.
books = db.execute("SELECT * FROM books WHERE isbn LIKE :isbn", {"isbn":"0"+"%"})
if books is None:
raise RuntimeError("Error @ books route, Didn't fetch rows from books table.")
return render_template("books.html",books=books)
@app.route("/books/<int:book_id>")
def review(book_id):
''' Show book information inner and API '''
# Get book information from books table using book_id got from books.html
bookInfo = db.execute("SELECT * FROM books WHERE id=:book_id", {"book_id": book_id}).fetchone()
# Error handling.
if bookInfo is None:
raise RuntimeError("Error @ route: review, didn't fetch book information from books table.")
return render_template("review.html", bookInfo=bookInfo)
<!-- books.html -->
{% extends "base.html" %}
{%block body%}
<!-- book list <books.html> -->
<!-- this will have a template for loop over elements in database -->
<div class="container list-group">
{% for book in books %}
<a href="{{url_for('review', book_id=book.id)}}" class="list-group-item list-group-item-action flex-column align-items-start">
<div class="d-flex w-100 justify-content-between">
<h5 class="mb-1">{{book.title}}</h5>
<small><h6>ISBN: {{book.isbn}}</h6></small>
</div>
<p class="mb-1"><h6>author: {{book.author_name}}</h6></p>
<small>publication year: {{book.publish_year}}</small>
</a>
{%endfor%}
</div>
{%endblock%}
<!-- review.html -->
{% extends "base.html" %}
{%block body%}]
<!-- Book details, and user's review -->
<div class="container">
<dl class="row">
<dt class="col-sm-3">Book title</dt>
<dd class="col-sm-9">{{bookInfo.title}}</dd>
<dt class="col-sm-3">Book author</dt>
<dd class="col-sm-9">{{bookInfo.author_name}}</dd>
<dt class="col-sm-3">ISBN</dt>
<dd class="col-sm-9">{{bookInfo.isbn}}</dd>
<dt class="col-sm-3">Publication year</dt>
<dd class="col-sm-9">{{bookInfo.publish_year}}</dd>
</div>
{%endblock%}
我希望有一个关于用户选择的书的信息列表,但相反,我收到了这个错误:TypeError: The view function did not return a valid response。该函数要么返回 None ,要么在没有 return 语句的情况下结束。
解决方案
推荐阅读
- javascript - 正则表达式以匹配自然语言中的十进制数
- python - ParserError:错误标记数据。C错误:内存不足
- python-3.x - 使用图像更改 image_1 的 roi(图像区域),而不会丢失 image_1 中的其他像素
- python - 执行程序心跳超时:Spark 作业中的错误
- r - 是否有反转 x 和 y 轴的栅格函数?
- javascript - 在玩笑测试中模拟节点模块
- r - 如何用 plotly 绘制多个图
- yarnpkg - 在纱线安装期间构建排毒失败
- windows - 创建不创建控制台窗口的 Windows 可执行文件
- flutter - 无限期旋转容器