我怎样才能对这个视图进行分页?

How can I paginate this view?

我正在尝试将此基于函数的视图转换为基于 class 的视图以进行分页。

def tag(request, tag):    
    posts = Post.objects.filter(approved=True, tags__name__in=[tag]).order_by('-date_posted')
    return render(request, 'blog/tag.html', {'tag': tag, 'posts': posts})

我是这样写的:

class TagView(ListView):
    model = Post
    template_name = 'blog/tag.html'
    context_object_name = 'posts'
    ordering = ['-date_posted']
    paginate_by = 3

    def get_queryset(self):
        return Post.objects.filter(approved=True, tags__name__in=[tag]).order_by('-date_posted')

但是当我加载页面时,这不会显示任何帖子。 谁能告诉我这是为什么?或者,如果您知道另一种在不将其转换为基于 class 的视图的情况下对该视图进行分页的方法,我们也将不胜感激。提前谢谢你。

在您的 ListView 中,您没有将任何数据传递到 [tag] 变量,因此您的查询集返回空。根据您传递给它的内容,您可能需要也可能不需要在查询中将其括起来的 [] 方括号。

如果您使用的是单个字符串标记,例如,通过 URL /tag/myTag 然后将数据从 URL 传递到列表视图中,您可以更新您的 get_queryset 方法:

 def get_queryset(self):
        return Post.objects.filter(approved=True, tags__name__in=[self.kwargs['tag']]).order_by('-date_posted')

如果您要传递一个实际的标签列表,您可能需要在上一个视图的会话变量中设置它并在此处调用它

在之前的视图中

request.session['tags'] = list_of_tags

并且在这个视图中

tags = request.session['tags']
return Post.objects.filter(approved=True, tags__name__in=tags).order_by('-date_posted')