虽然我添加了渲染,但Django视图并没有返回HttpResponse对象

时间:2018-06-11 05:41:59

标签: django

以下视图方法返回None而不是HttpResponse对象。

def upload(request):
    def get(self, request):
        photos_list = Images.objects.all()
        return render(self.request, 'rango/view.html', {'photos': photos_list},)

    def post(self, request):
        form = ImagesForm(self.request.POST, self.request.FILES)

        if form.is_valid():
            photo = form.save()
            data = {'is_valid': True, 'name': photo.file.name, 'url': photo.file.url}

        else:
            data = {'is_valid': False}

        return JsonResponse(data)

即使我要回复渲染,我为什么要这样做?

2 个答案:

答案 0 :(得分:0)

这是因为upload()是基于函数的视图,而不是基于类的视图。它永远不会在您的代码中调用嵌套的getpost方法。

你应该像这样重写它以使它工作:

def upload(request):
    if request.method == 'POST':
        form = ImagesForm(request.POST, request.FILES)

        if form.is_valid():
            photo = form.save()
            data = {'is_valid': True, 'name': photo.file.name, 'url': photo.file.url}

        else:
            data = {'is_valid': False}

        return JsonResponse(data)
    else:
        photos_list = Images.objects.all()
        return render(request, 'rango/view.html', {'photos': photos_list},)

答案 1 :(得分:0)

您的功能看起来像class,但您并未将其用作课程。类的self表示正在创建的object。在这种情况下,不需要类,因此请删除所有self

def upload(request):
    photos_list = Images.objects.all()
    if request.method == 'POST'
        form = ImagesForm(request.POST,request.FILES)
        if form.is_valid():
            photo = form.save()
            data = {'is_valid': True, 
                    'name': photo.file.name, 'url': photo.file.url}
        else:
            data = {'is_valid': False}
        return JsonResponse(data)
    return render(request, 'rango/view.html', {'photos': photos_list},)