如何显示Django中DB的倒数第二个对象?

时间:2018-11-16 14:08:06

标签: django django-models

我有一个新闻模型。看起来像:

class Post (models.Model):
    title = models.CharField(max_length=50)
    body = models.TextField()
    image = models.ImageField(upload_to='news_image', blank=True)

    def __str__(self):
        return self.title

views.py如下:

class PostListView(ListView):
    model = Post
    template_name = 'html/main.html'


class PostDetailView(DetailView):
    model = Post
    template_name = 'html/post_detail.html'

每个新闻都有自己的网址:

urlpatterns = [
    path('', views.PostListView.as_view(), name='main'),
    path('news/<int:pk>/', views.PostDetailView.as_view(), name='news_page')]

我使用django管理员添加帖子。
我想在main.html上显示数据库中倒数第二个帖子的标题和图像。我还需要该帖子的链接。

<img src="?????" href="????">
<p>{{ ??? }}</p> 

我该怎么办?

1 个答案:

答案 0 :(得分:2)

这不是您在模板中执行的操作。而是通过定义get_context_data将其添加到视图中的上下文中。

class PostListView(ListView):
    model = Post
    template_name = 'html/main.html'

    def get_context_data(self, **kwargs):
        kwargs['second_last_post'] = Post.objects.all().reverse()[1]
        return super().get_context_data(**kwargs)

(请注意,由于您没有定义任何顺序,因此“倒数第二个帖子”的内容相当随意。)