У меня есть шаблон книги, который отображает дополнительную информацию о книге, такую как название, цена, автор и т. Д.
в том же шаблоне у меня есть аналогичный раздел книг, где я хочу отобразить книгу, аналогичную избранной книге в соответствии с классификацией (обе имеют одинаковую классификацию)
и для этого я думаю о том, чтобы перетасовать книги, которые я извлекаю из базы данных, вместо того, чтобы просто использовать обычный цикл, чтобы сделать его более динамичным, поскольку в каждой книге есть такая классификация, на странице каждый раз отображаются разные книги, а не одни и те же
вот код в views.py
def book(request, book_id):
book = get_object_or_404(Book, pk=book_id)
similar_books = Book.objects.all()[:4]
book_context = {
'book': book,
'similar_books': similar_books
}
return render(request, 'books/book.html', book_context)
и этот код в моем шаблоне
<div class="row">
<div class="col py-5 text-center">
<h3 class="mb-5">Similar books</h3>
<div class="row d-flex justify-content-center">
{% for similar_book in similar_books %}
{% if similar_book.classification == book.classification and similar_book.id > book.id %}
<div class="col-md-3">
<a href="{% url 'book' similar_book.id %}"><img src="{{ similar_book.img.url }}"></a>
<a href="{% url 'book' similar_book.id %}"><p class="mt-2">{{ similar_book.title}}</p></a>
<p class="text-muted">{{ similar_book.author }}</p>
<p>{{ similar_book.price }}</p>
</div>
{% endif %}
{% endfor %}
</div>
</div>
причина, по которой я включаю similar_book.id > book.id
, заключается в том, что я не хочу, чтобы эта книга отображалась в похожих книгах
я знаю, что это не лучший способ сделать это с помощью логики, как если бы выбранная книга была последней книгой в списке, цикл остановится
Я также подумал о замене оператора if выше на
{% for similar_book in similar_books[{{ similar_book.id }} -1:] %}
чтобы начать циклический просмотр книг после избранной книги и добавление оператора if {% if book.id == len(similar_books) %}
затем {% similar_book.id == 1 %}
но не уверен, правильно ли это логично или нет, есть идеи?