我怎样才能对这个视图进行分页?
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')
我正在尝试将此基于函数的视图转换为基于 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')