'视图dashboard.views.index未返回HttpResponse对象。当使用特定变量的POST请求时,它返回None

2024-10-02 10:34:15 发布

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

所以我试图建立一个简单的视图,允许用户使用表单提交来更改他们的头像。在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时,才保存模型。我应该如何着手解决这个问题


Tags: 用户imageform视图表单indexreturnif
2条回答

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

谢谢你的帮助

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

相关问题 更多 >

    热门问题