为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

繁花不似锦 2022-10-25 09:47:02
所以我正在尝试构建一个简单的视图,允许用户使用表单提交来更改他们的头像。在 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。我应该如何解决问题?
查看完整描述

2 回答

?
拉丁的传说

TA贡献1789条经验 获得超8个赞

并非所有 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})



查看完整回答
反对 回复 2022-10-25
?
牧羊人nacy

TA贡献1862条经验 获得超7个赞

好的,我已经完成了这项工作,似乎输入的变量名是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})

感谢您尝试提供帮助


查看完整回答
反对 回复 2022-10-25
  • 2 回答
  • 0 关注
  • 185 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号