use*_*270 2 python django django-class-based-views
我现在正在将所有基于Django函数的视图转换为基于类的视图...
这是我的原始代码:
views.py
def search(request):
if 'q' in request.GET:
q = request.GET['q']
if q:
result = Post.objects.filter(title__icontains=q)
variables = RequestContext(request, {
'result': result
})
return render_to_response('search.html', variables)
Run Code Online (Sandbox Code Playgroud)
我只是想把它改成CBV只是为了练习CBV ...
这是我到目前为止:
views.py
class PostSearch(TemplateView):
template_name = 'search.html'
def get(self, request, *args, **kwargs):
q = self.request.GET.get('q')
if q:
data = {
'result': Post.objects.filter(title__icontains=q)
}
return self.render_to_response(data)
Run Code Online (Sandbox Code Playgroud)
我认为这样可以正常工作,因为它是一个非常简单的代码.但是,我收到此错误:
ValueError: The view app_blog.views.PostSearch didn't return an HttpResponse object.
Run Code Online (Sandbox Code Playgroud)
所以我认为"render_to_response"在CBV中的作用完全不同......
将原始代码转换为CBV的正确方法是什么?
谢谢 :(((
class PostSearch(TemplateView):
template_name = 'search.html'
def get_context_data(self, **kwargs):
context = super(PostSearch, self).get_context_data(**kwargs)
q = self.request.GET.get('q')
if q:
context['result'] = Post.objects.filter(title__icontains=q)
return context
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2021 次 |
| 最近记录: |