'视图 dashboard.views.index 没有返回 HttpResponse 对象。

所以我正在尝试构建一个简单的视图,允许用户使用表单提交来更改他们的头像。在 POST 请求之前渲染视图可以正常工作,但是当用户通过表单提交提交新图像文件时,我收到以下错误:


Value Error at /

The view dashboard.views.index didn't return an HttpResponse object. It returned None instead.

以下是我的片段view.py


@login_required(login_url='/accounts/login/')

def index(request):

    if request.method == 'POST':

        if 'imagefile' in request.POST:

            form = forms.AvatarUpdate(request.POST, request.FILES)

            if form.is_valid():

                image = request.FILES['image']

                request.user.avatar = image

                request.user.save()

                return redirect('/')

    else:

        form = forms.AvatarUpdate()

        return render(request, 'dashboard/index.html', {"this_page": "home", "form": form})

虽然forms.py如下:


class AvatarUpdate(forms.Form):

    imagefile = forms.ImageField(widget=forms.FileInput(attrs={'name': "imagefile"}), label="Change user avatar")

我的意图是仅当 POST 请求包含变量时才保存模型imagefile。我应该如何解决问题?


繁花不似锦
浏览 186回答 2
2回答

拉丁的传说

并非所有 if 语句都返回 HttpResponse。如果要保持相同的逻辑,则需要将 else 与 HttpResponse 放在一起,并且不能将最后一个 return 放在 else 语句之外,因为您的表单变量将无法识别。def index(request):    if request.method == 'POST':        if 'imagefile' in request.POST:            form = forms.AvatarUpdate(request.POST, request.FILES)            if form.is_valid():                image = request.FILES['image']                request.user.avatar = image                request.user.save()                return redirect('/')            else:                return render(...)        else:            return render(...)    else:        form = forms.AvatarUpdate()        return render(request, 'dashboard/index.html', {"this_page": "home", "form": form})或者你可以定义一个默认的表单值:def index(request):    form = None    if request.method == 'POST':        if 'imagefile' in request.POST:            form = forms.AvatarUpdate(request.POST, request.FILES)            if form.is_valid():                image = request.FILES['image']                request.user.avatar = image                request.user.save()                return redirect('/')    else:        form = forms.AvatarUpdate()    return render(request, 'dashboard/index.html', {"this_page": "home", "form": form})

牧羊人nacy

好的,我已经完成了这项工作,似乎输入的变量名是request.FILESnot的一部分request.POST。所以总的来说view.py是这样的:@login_required(login_url='/accounts/login/')def index(request):    form = forms.AvatarUpdate()    if request.method == 'POST':        form = forms.AvatarUpdate(request.POST, request.FILES)        if 'imagefile' in request.FILES:            if form.is_valid():                image = request.FILES['imagefile']                request.user.avatar = image                request.user.save()                return redirect('/')    else:        return render(request, 'dashboard/index.html', {"this_page": "home", "form": form})感谢您尝试提供帮助
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python