httpresponse错误django通用模板



我能够使用views.py中的参数硬编码来渲染基于类的视图view listView模板。

class ResourceSearchView(generic.ListView):
    model = creations
    context_object_name = 'reviews'
    template_name = 'reviews.html'
    query = 'theory'
    # def get(self, request):
    #     if request.GET.get('q'):
    #         query = request.GET.get('q')
    #         print(query)
    queryset = creations.objects.filter(narrative__contains=query).order_by('-post_date')

但是,当通过get方法通过表单发送参数(下图)时,

class ResourceSearchView(generic.ListView):
    model = creations
    context_object_name = 'reviews'
    template_name = 'reviews.html'
    query = 'theory'
    def get(self, request):
        if request.GET.get('q'):
            query = request.GET.get('q')
            print(query)
    queryset = creations.objects.filter(narrative__contains=query).order_by('-post_date')

我收到此错误

view creations.views.resourcesearchview未返回 httpresponse对象。它没有返回。

请注意,参数名称Q和关联的值已成功检索(使用PRINT(QUERY)确认)。

因此,使用Django中的CBV,您必须返回某种有效的响应,而解释器可以用来执行实际的HTTP操作。您的GET方法没有返回任何东西,这就是使Django生气的原因。您可以将模板渲染或将用户重定向到呈现模板的视图,但您必须做>某件事。CBV中的一种常见模式是执行以下操作:

return super().get(request, *args, **kwargs)

...继续使用最终呈现模板或以其他方式处理响应的方法链。您也可以直接致电render_to_response(),或者如果您从该视图中移动,将用户重定向到get_success_url或类似。

在此处查看(http://ccbv.co.uk),以易于阅读所有当前Django CBV的布局以及它们支持的方法/变量。

感谢您的回复。这是一个解决方案。

class ResourceSearchView(generic.ListView):
    model = creations
    context_object_name = 'reviews'
    template_name = 'reviews.html'
    def get_queryset(self):
        query = self.request.GET.get('q')
        queryset = creations.objects.filter(narrative__contains=query).order_by('-post_date')
        return queryset

最新更新