在博文中添加 next/previous 按钮

Adding a next/previous button in blog posts

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

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 代码中添加了一个下一步按钮,它会将我重定向到我上面显示的相同 views.py 函数,并且变量(num)将递增 5 从而显示我的下一个5个职位。然而,这似乎不起作用,因为我总是看到相同的 5 个帖子。

有没有更好的方法来实现 next/previous 按钮?如果是这样,你能具体说明吗?非常感谢!

我觉得你想自己做的太多了。 Django 对此有支持,它甚至在渲染列表时有很多支持,并强制用户登录。

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

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

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

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

<!-- render the list -->

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

urls.py 中,您可以使用 PostListView.as_view() 而不是 PostLists。所以 ListView 将在这里处理身份验证检查、切片、分页等