Я бродил здесь неделями, пробовал все, что мог, на все, но результат не ожидался. Я хочу отображать сведения о книге, когда пользователь выполняет поиск и щелкает ссылку на книгу. У меня маршрут поиска работает правильно, но маршрут книги, который должен отображать сведения о книге, выдает ошибку 404 Not Found. с этим; Запрошенный URL-адрес не найден на сервере. Если вы ввели URL-адрес вручную, проверьте правописание и попробуйте еще раз.
Пожалуйста, мне нужно, чтобы кто-нибудь взглянул на этот код и сказал, что я ошибаюсь, и как я могу заставить его работать.
Вот код.
@app.route("/book/<isbn>", methods=["GET", "POST"])
@loggedin_required
def book(isbn):
""" Takes and renders user review on the book page."""
if request.method == "POST":
# Keep track of individual user per session
active_user = session["user_id"]
# Fetch data from form
rating = request.form.get("rating")
comment = request.form.get("comment")
# Get book_id by ISBN
row = db.execute("SELECT id FROM books WHERE isbn = :isbn",
{"isbn": isbn})
# Saving id into variable
_id = row.fetchone() # (id,)
_Id = _id[0]
# Check to ensure that its ONLY 1 review/user per book)
row_check = db.execute("SELECT * FROM reviews WHERE user_id = :user_id AND book_id = :book_id",
{"user_id": active_user,
"book_id": _id})
if row_check.rowcount > 0:
flash('You have left a review for this book already.')
return redirect("/book/" + isbn)
# Convert to save into DB
rating_result = int(rating_result)
db.execute("INSERT INTO reviews (user_id, book_id, comments, rating_result) VALUES \
(:user_id, :book_id, :comments, :rating_result)",
{"user_id": active_user,
"book_id": _id,
"comments": comment,
"rating_result": rating})
db.commit()
flash('Review recieved. Thank you!')
return redirect("/book/" + isbn)
# Take the book ISBN and redirect to his page (GET)
else:
row = db.execute("SELECT isbn, title, author, year FROM books WHERE \
isbn = :isbn",
{"isbn": isbn})
book_details = row.fetchall()
return render_template("/book.html", isbn=isbn, book_details=book_details)
Это метод поиска:
@app.route("/search")
@loggedin_required
def search():
""" check if book id is supply"""
if not request.args.get("book"):
return render_template("error.html", message="Sorry! you didn't supply a book")
query = "%" + request.args.get("book") + "%"
query = query.title()
rows = db.execute("SELECT isbn, title, author FROM books WHERE \
isbn LIKE :query OR \
title LIKE :query OR \
author LIKE :query LIMIT 20",
{"query":query})
if rows.rowcount == 0:
return render_template("error.html", message="No book matches your search")
books = rows.fetchall()
return render_template("search.html", books=books)
И это страница html, которая обрабатывается и отображается функцией поиска :
{% extends "layout.html" %}
{% block title %}
search
{% endblock %}
{% block content %}
<div>
{% for book in books %}
<a href="{{url_for('book', isbn=isbn)}}" class="card-link">
{{book.title}} by {{book.author}}
</a>
{% endfor %}
</div>
Ссылка herf должна обрабатываться маршрутом книги, но при нажатии на ссылку после поиска выдается ошибка 404 Not Found.