【发布时间】:2019-07-28 15:38:42
【问题描述】:
我有书籍模板,其中显示有关书籍的更多信息,如书名、价格和作者等。
在同一个模板中,我有类似的书籍部分,我想根据分类显示与特色书籍相似的书籍(两者具有相同的分类)
为了做到这一点,我正在考虑对我从数据库中检索到的书籍进行洗牌,而不是仅仅使用普通循环来使其更具动态性,因为每本书都有该分类,页面每次显示不同的书籍而不是相同的书籍
这是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) %} then {% similar_book.id == 1 %}
但不确定逻辑是否正确,有什么想法吗?
【问题讨论】:
标签: python django django-models django-templates django-views