Как жестко передать переменную из шаблона B, поступающую «из шаблона A в шаблон B» в функцию маршрута? - PullRequest
0 голосов
/ 23 сентября 2019

Я создаю веб-приложение, которое показывает список книг, пользователь нажимает на книгу, и он направляется к книге, содержащей другой список информации этой книги.Books.html перенаправляет пользователя на review.html, проблема в том, что функция url_for в файле books.html не работает должным образом.

файл books.html представляет собой предопределенный список для начальной загрузки 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: Функция представления не вернула правильный ответ.Функция либо вернула None, либо завершилась без оператора return.

...