<p>并非所有if语句都返回HttpResponse。如果希望保持相同的逻辑,则需要将else与HttpResponse放在一起,而不能将最后一个return放在else语句之外,因为无法识别表单变量</p>
<pre><code>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})
</code></pre>
<p>也可以定义默认表单值:</p>
<pre><code>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})
</code></pre>