我能够使用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