我在django中有一个注册视图,如下所示:
from django import forms
from django.contrib.auth.forms import UserCreationForm
from django.shortcuts import render_to_response, RequestContext, HttpResponseRedirect
def register(request):
'''Registers the users'''
if request.method == 'POST':
form = UserCreationForm(request.POST)
if form.is_valid():
new_user = form.save()
return HttpResponseRedirect('/index/') #Returns user to user if successfully logs in
else:
form = UserCreationForm() #Redirects to the UserCreationForm is the form is invalid
return render_to_response('registration/register.html', {'form':form}, context_instance=RequestContext(request))
else:
return render_to_response('registration/register.html', {'form':form}, context_instance=RequestContext(request))当我尝试运行视图时,我得到了UnBound LocalError。
#Full exception:
Traceback:
File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py" in get_response
115. response = callback(request, *callback_args, **callback_kwargs)
File "/home/zurelsoft/workspace/fyp/summary/views.py" in register
20. return render_to_response('registration/register.html', {'form':form}, context_instance=RequestContext(request))
Exception Type: UnboundLocalError at /
Exception Value: local variable 'form' referenced before assignment怎么了?
发布于 2013-03-25 13:57:04
如果方法不是post,则表单将转到最后一个else块
您应该在request.POST外部定义表单,如下所示
def register(request):
'''Registers the users'''
form = UserCreationForm()
if request.method == 'POST':
form = UserCreationForm(request.POST)
if form.is_valid():
new_user = form.save()
return HttpResponseRedirect('/index/') #Returns user to user if successfully logs in
else:
form = UserCreationForm() #Redirects to the UserCreationForm is the form is invalid
return render_to_response('registration/register.html', {'form':form}, context_instance=RequestContext(request))
else:
return render_to_response('registration/register.html', {'form':form}, con发布于 2013-03-25 13:57:01
对于GET请求,您没有定义form。
我建议补充一句
form = UserCreationForm()行前
if request.method == 'POST':https://stackoverflow.com/questions/15608519
复制相似问题