Показано 5 лучших сообщений в django
В моем проекте я хочу показать 5 лучших сообщений в домашнем разделе по категориям. Я получаю все сообщения в домашних разделах и если категория одинаковая, я показываю сообщение. Но forloop.counter не подходит в этой ситуации. Мне нужен счетчик, чтобы разорвать цикл или условие if. но я не могу. Пожалуйста, помогите мне.
views.py
def home(request):
category = Category.objects.all().filter(parent=None)
post_by_category = Post.objects.filter(published=True).order_by('-category')
slider = Post.objects.filter(slider=True).order_by('-created_on')
context = {
'category':category,
'post_by_category':post_by_category,
'slider':slider,
}
return render(request,'home.html',context)
home.html
<div class="col-md-9">
{% for post in post_by_category %}
{% if post.category.category_name == category.category_name %}
<div class="d-lg-flex post-entry-2">
<a href="{{post.get_url}}" class="me-4 thumbnail mb-4 mb-lg-0 d-inline-block">
<img src="{{post.heder_image.url}}" alt="" class="img-fluid">
</a>
<div>
<div class="post-meta"><span class="date"><a href="{{category.get_url }}">{{category.category_name }}</a>
</span> <span class="mx-1">•</span> <span>Jul
5th '22</span></div>
<h3><a href="{{post.get_url}}">{{post.title}}</a></h3>
<p>{{post.meta_description}}</p>
<div class="d-flex align-items-center author">
<div class="photo"><img style="width:50px;height:50px;border-radius:50%"
src="{{user.profile.profile_picture.url}}" alt="" class="img-fluid"></div>
<div class="name">
<h3 class="m-0 p-0">{{post.author.first_name}} {{post.author.last_name}}</h3>
</div>
</div>
</div>
</div>
{% endif %}
{% endfor %}
</div>
Просто добавьте кусочек после фильтра, например:
post_by_category = Post.objects.filter(published=True).order_by('-category')[:5]