将基于函数的视图转换为基于类的视图

时间:2019-06-09 16:42:12

标签: python django

我认为它应该更简单,但这是我基于函数的过滤器视图

def withSub(request):
    post = Post.objects.filter(with_or_without_sub='WS')
    paginator = Paginator(post, 2)
    page = request.GET.get('page') 
    post = paginator.get_page(page)

    content_dict = {
        'posts':post,
        'paginator':paginator

    }
    return render(request, 'community/withSub.html', content_dict)

我只是想以以下格式将其切换到基于类的视图,我只想像在函数视图中一样将过滤器放入Post模型中

class PostListView(ListView):
    model = Post
    template_name = 'community/home.html'  # <app>/<model>_<viewtype>.html

3 个答案:

答案 0 :(得分:0)

可能类似于以下内容。您可能需要测试和调试。使用equest.GET就可以了。

from django.views.generic.list import ListView

class PostListView(ListView):
    model = Post
    template_name = 'community/home.html'  # <app>/<model>_<viewtype>.html

    def get(self, request, *args, **kwargs):
        post = Post.objects.filter(with_or_without_sub='WS')
        paginator = Paginator(post, 2)
        page = request.GET.get('page') 
        post = paginator.get_page(page)

        content_dict = {
            'posts':post,
            'paginator':paginator

        }

        context = self.get_context_data()
        context.update(content_dict)
        return self.render_to_response(context)

答案 1 :(得分:0)

如果要自定义查询集,请使用queryset属性:

class PostListView(ListView):
    queryset = Post.objects.filter(with_or_without_sub='WS')
    template_name = 'community/home.html'

答案 2 :(得分:0)

您可以设置一个特定的查询集,如下所示:

queryset = Post.objects.filter(with_or_without_sub='WS')

或者如果最终涉及到更复杂的逻辑,则可以覆盖视图的get_queryset()方法,如下所示:

from django.views.generic.list import ListView

class PostListView(ListView):
    model = Post
    template_name = 'community/home.html'

    def get_queryset(self):
        return Post.objects.filter(with_or_without_sub='WS', ...)