Отображение последних 3 записей из модели Django в шаблоне HTML
Я хочу показать 3 последних сообщения в разделе "Последние сообщения" на моей странице. Как я могу сделать это без использования цикла for или это единственный способ?
Мне удалось получить результат в консоли shell, однако я не могу показать его в HTML шаблоне. Пожалуйста, помогите
models.py
from typing import Any
from django.db import models
from django.contrib.auth.models import User
from django.utils import timezone
from ckeditor.fields import RichTextField
class BlogPost(models.Model):
blogpic = models.CharField(max_length=1000)
title = models.CharField(max_length=255)
description = models.CharField(max_length=100, default='Enter a short desctiption', editable=True)
body = RichTextField(blank=True, null=True)
category = models.CharField(max_length=50, default='banking', editable=True)
tag = models.CharField(max_length=50, default='consulting', editable=True)
author = models.ForeignKey(User, on_delete=models.CASCADE)
blog_date = models.DateField(default=timezone.now, editable=True,)
def __str__(self):
return self.title + ' | ' + str(self.author)
views.py
from django.views.generic import ListView, DetailView
from . models import BlogPost
class BlogView(ListView):
model = BlogPost
template_name = 'blog.html'
ordering = ['-blog_date']
class BlogDetailsView(DetailView):
model = BlogPost
template_name = 'blog_details.html'
urls.py
from django.urls import path
from AssayBlog.models import BlogPost
from . views import BlogView, BlogDetailsView
urlpatterns = [
path('', BlogView.as_view(), name="blog"),
path('_detail/<int:pk>', BlogDetailsView.as_view(), name="blog_details"),
blog_details.html
<h3 class="sidebar__title">Latest Posts</h3>
<ul class="sidebar__post-list list-unstyled">
<li>
<div class="sidebar__post-image">
<img src="{% static 'assets/images/blog/lp-1-1.jpg' %}" alt="">
</div>
<div class="sidebar__post-content">
<h3>
<a href="#" class="sidebar__post-content_meta"><i class="far fa-comments"></i>2 Comments</a>
<a href="news-details.html">going global with transformation</a>
</h3>
</div>
</li>
</ul>
Вы можете использовать функцию get_context_data в любом views.py.
class BlogDetailsView(DetailView):
model = BlogPost
template_name = 'blog_details.html'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['latests_posts'] = BlogPost.objects.all()[-3:] # or [:3] depending on model ordering
return context
Использование шаблона:
{% for post in latest_posts %}
{{ post.title }}
# rest of single post section
{% endfor %}