Django:如何从数据库中获取倒数第二个对象?

时间:2018-11-15 19:02:12

标签: django

我有一个新闻模型。我使用Django admin将新闻添加到数据库中。模型Post由标题,正文和图像组成。

在我项目的main.html页上,我有一个带3张幻灯片的轮播。 我的数据库中已经有一些新闻,并且我想在该轮播中显示最后一个,倒数第二个,等等。图像

我的问题是:我应该在 html 中添加什么代码以显示最后一张,倒数第二张和倒数第三张图片?

<img src="???"> {# the last image #}
<img src="???"> {# the second last image #}
<img src="???"> {# the third last image #}

2 个答案:

答案 0 :(得分:0)

您可以尝试这样:

posts= Post.objects.all().order_by('-id')
last_post = posts[0]
second_last_post = posts[1]
third_last_post = posts[2]
last_three_posts = posts[0:3]

但是请确保至少有3个帖子,否则它将引发索引错误

答案 1 :(得分:0)

# views.py
from django.views.generic import TemplateView
class HomePageView(TemplateView):
    template_name = 'home.html'
    posts = Post.objects.all().order_by('-id') 

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context = {
            'carousel_posts': self.posts[:3],
        }
        return context

使用此方法在模板中的carouser_posts关键字上进行for循环,并提取所需的信息。

<div class="carousel-inner">
  {% for post in carousel_posts %}
      <div class="carousel-item active">
        <img src="{{post.image}}">
        <p>{{post.title}}"</p>
      </div>
    {% endfor %}
 </div>

更新 回答您的更新。使用carousel_posts提供的上下文关键字HomePageView,我们可以使用for循环逐个访问post对象。

在模板中,假设您的Post模型具有一个名为image的图像字段。

{% for post in carousel_posts %}
    <img src="{{ post.image.url }}"> 
{% endfor %}