产生的错误
分配之前引用的本地变量"url">
我在SO中搜索过这个问题,但大多数似乎都解决了这样一个事实,即变量是在函数外声明的,需要全球化,或者变量是在类的成员函数中访问的。这种情况不同。我不明白为什么不允许在同一个函数中调用url
。
看看下面的代码,url
在登录函数内的任何地方都可以访问吗?我相信,如果这是C/C++,那就是事实。为什么这有什么不同?
代码
def login(request):
#
#no url declaration here
#
if request.POST:
…
url = 'main.login.html'
user = authenticate(username=username,password=password)
if user is not None:
if user.is_active:
auth_login(request, user)
state = 'You are logged in'
url = 'main.home.html'
else:
state = 'You are not logged in due to error'
else:
state = 'Incorrect username or password'
…
render_to_response(url,{'state':state,'username':username},context_instance=RequestContext(request)
回溯指向最后一行。
render_to_response(url,{'state':state,'username':username},context_instance=RequestContext(request)
在您的代码中,您进行了两次更改,它将正常工作。在检查post方法之前定义url,并在render_to_response语句中使用return关键字。
def login(request):
url = 'main.login.html'
state = ''
if request.POST:
user = authenticate(username=username,password=password)
if user is not None:
if user.is_active:
auth_login(request, user)
state = 'You are logged in'
url = 'main.home.html'
else:
state = 'You are not logged in due to error'
else:
state = 'Incorrect username or password'
return render_to_response(url,{'state':state,'username':username},context_instance=RequestContext(request)
若在检查POST方法之前并没有定义url和状态,那个么它将引发GET请求的错误。