赋值错误之前的变量-referenced的Python范围

时间:2013-05-28 03:44:37

标签: python django scope

错误产生

  分配前引用的

局部变量'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)

1 个答案:

答案 0 :(得分:2)

在您的代码中,您进行了两次更改,它将正常工作。在检查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和state,那么它将引发GET请求的错误。