【问题标题】:next or previous item within an ordered, filtered queryset in DjangoDjango中排序的过滤查询集中的下一个或上一个项目
【发布时间】:2021-08-03 16:53:40
【问题描述】:

如何从 post_details(DetailView) 过渡到下一篇文章,以便下一篇文章和上一篇文章都可用?

vievs.py

class HomeView(ListView):
    model = Post
    #queryset = Post.objects.filter(status=1)
    cats = Category.objects.all()
    template_name = 'home.html'
    #ordering = ['-post_date']
    paginate_by = 6

    def get_context_data(self, *args, **kwargs):
        cat_menu = Category.objects.all()
        context = super(HomeView, self).get_context_data(*args, **kwargs)
        context["cat_menu"] = cat_menu
        return context


class ArticleDetailView(HitCountDetailView):
    model = Post
    template_name = 'post_detail.html'
    count_hit = True


    def get_context_data(self, *args, **kwargs):
        cat_menu = Category.objects.all()
        context = super(ArticleDetailView, self).get_context_data(*args, **kwargs)
        
        stuff = get_object_or_404(Post, id=self.kwargs['pk'])
        total_likes = stuff.total_likes()

        context["cat_menu"] = cat_menu
        context["total_likes"] = total_likes

        return context

按日期和 ID 排序

【问题讨论】:

    标签: django pagination detailview


    【解决方案1】:

    如果您想要基于DateTimeField 的上一个或下一个项目,您可以使用.get_previous_by_<i>fieldname</i>(…) [Django-doc].get_next_by_<i>fieldname</i>(…) [Django-doc]。因此,您可以通过以下方式获取 stuff 的上一个/下一个项目:

    try:
        prev_stuff = stuff.get_previous_by_post_date()
    except Stuff.DoesNotExist:
        prev_stuff = None
    
    try:
        next_stuff = stuff.get_next_by_post_date()
    except Stuff.DoesNotExist:
        next_stuff = None

    【讨论】:

    • 告诉我如何在模板中实现? {% if next_stuff %} 下一个 {{ next_stuff.title }}-> {% else %} 这是最后一篇文章! {% endif %}
    • @asd: 你应该在渲染时将 prev_stuffnext_stuff 传递给上下文。
    • context["prev_stuff"] = prev_stuff context["next_stuff"] = next_stuff - 给出错误消息(不存在后匹配查询。)
    • 感谢您的反馈,这让我变得更好!
    • @asd:如果不存在这样的Stuff,则需要将其包装在try: 中,除非分配None
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    • 2011-11-07
    • 2010-12-14
    • 2014-04-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多