0

产生的错误

赋值前引用的局部变量“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)

Traceback 指向最后一行。

render_to_response(url,{'state':state,'username':username},context_instance=RequestContext(request)
4

1 回答 1

2

在您的代码中,您进行了两次更改,它将正常工作。在检查 post 方法之前定义 url 并将 return 关键字与 render_to_response 语句一起使用。

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 请求错误。

于 2013-05-28T05:13:17.480 回答