在博客文章中添加下一个/上一个按钮

时间:2018-07-13 09:28:55

标签: django django-views forums

在我的页面上,所有博客文章都将显示。所以我想实现下一个/上一个按钮来改善我的页面。

def PostLists(request):
    num = request.session.get('num',-5)
    request.session['num'] = num
    num = num + 5
    exp = Post.objects.order_by('-date').all()[num:(num+5)]
    context = {
        'object_list': exp
    }
    if (request.user.is_authenticated):
        return render(request, 'dashboard/postlist.html', context=context)
    else:
        return redirect('login')

我在html代码中添加了一个next按钮,它将把我重定向到与上述相同的views.py函数,变量(num)将增加5,从而向我展示我的下5个帖子。但是,这似乎不起作用,因为我总是看到相同的5条帖子。

是否有更好的方法来实现下一个/上一个按钮?如果可以的话,请您指定?非常感谢!

1 个答案:

答案 0 :(得分:5)

我认为您尝试自己做太多事情。 Django对此提供了支持,在呈现列表以及强制用户登录时,甚至还提供了很多支持。

我们可以为此使用基于视图:ListView

from django.contrib.auth.mixins import LoginRequiredMixin
from django.views.generic import ListView

class PostListView(LoginRequiredMixin, ListView):
    model = Post
    template_name = 'dashboard/postlist.html'
    paginate_by = 5
    queryset = Post.objects.order_by('-date')

在您的dashboard/postlist.html模板中,您可以添加逻辑以呈现按钮。例如:

<!-- render the list -->

{% if is_paginated %}
    {% if page_obj.has_previous %}
        <a href="?page={{ page_obj.previous_page_number }}">previous</a>
    {% endif %}
    {% if page_obj.has_next %}
        <a href="?page={{ page_obj.next_page_number }}">next</a>
    {% endif %}
{% endif %}

然后,您可以在urls.py中使用PostListView.as_view()代替PostLists。因此ListView将在此处处理身份验证检查,切片,分页等。