Django FBV的“render_to_response”等价于ClassBasedView?

2024-06-14 12:19:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我现在正在将所有基于Django函数的视图转换为基于类的视图。。。在

这是我的原始代码:

视图.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)

我只是想把这个换成CBV只是为了练习CBV。。。在

到目前为止,我得到的是:

视图.py

^{pr2}$

我认为这会很好地工作,因为这是一个非常简单的代码。但是,我得到一个错误:

ValueError: The view app_blog.views.PostSearch didn't return an HttpResponse object.

所以我想“render_to_response”在CBV中的工作方式完全不同。。。在

把我的原始代码转换成CBV的正确方法是什么??在

谢谢:((


Tags: todjango代码py视图searchgetreturn
2条回答
from django.shortcuts import render
from django.http import HttpResponse
class PostSearch(TemplateView):
    template_name = 'search.html'
    def get(self, request, *args, **kwargs):
        q = request.GET.get('q')
        if q:
            data = {
                'result': Post.objects.filter(title__icontains=q)
            }

            return render(request,self.template_name,data)
        return HttpResponse('Please type a search query')
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

相关问题 更多 >