变量的Python作用域-在赋值错误之前引用



产生的错误

分配之前引用的本地变量"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请求的错误。

最新更新