2

現在、すべての 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

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)

非常に単純なコードなので、これでうまくいくと思いました。ただし、次のエラーが表示されます。

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

したがって、CBV では「render_to_response」の動作がまったく異なると思います...

元のコードを CBV に変換する正しい方法は何ですか??

ありがとう :(((

4

2 に答える 2

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')
于 2013-08-12T11:29:58.707 に答える