2011-06-10 70 views
0

我views.py是這個Django中的反向錯誤。如何調試呢?

from django.contrib.auth import authenticate, login 
from django.shortcuts import render_to_response 
def login(request): 
    def errorHandle(error): 
     form = LoginForm() 
     return render_to_response('login.html', { 
       'error' : error, 
       'form' : form, 
     }) 
    if request.method == 'POST': # If the form has been submitted... 
     form = LoginForm(request.POST) # A form bound to the POST data 
     if form.is_valid(): # All validation rules pass 
      username = request.POST['username'] 
      password = request.POST['password'] 
      user = authenticate(username=username, password=password) 
      if user is not None: 
       if user.is_active: 
        # Redirect to a success page. 
        login(request, user) 
        return render_to_response('courses/logged_in.html', { 
         'username': username, 
        }) 
       else: 
        # Return a 'disabled account' error message 
        error = u'account disabled' 
        return errorHandle(error) 
      else: 
       # Return an 'invalid login' error message. 
       error = u'invalid login' 
       return errorHandle(error) 
     else: 
      error = u'form is invalid' 
      return errorHandle(error) 
    else: 
     form = LoginForm() # An unbound form 
     return render_to_response('login.html', { 
      'form': form, 
     }) 

的urls.py是這個

url(r'^userprof/login/$', 'django.contrib.auth.views.login', {'template_name': 'userprof/login.html'}), 

模板login.html的是這個

{% block content %} 

{% if form.errors %} 
<p>Your username and password didn't match. Please try again.</p> 
{% endif %} 

<form method="post" action="{% url 'django.contrib.auth.views.login' %}"> 
{% csrf_token %} 
<table> 
<tr> 
    <td>{{ form.username.label_tag }}</td> 
    <td>{{ form.username }}</td> 
</tr> 
<tr> 
    <td>{{ form.password.label_tag }}</td> 
    <td>{{ form.password }}</td> 
</tr> 
</table> 

<input type="submit" value="login" /> 
<input type="hidden" name="next" value="{{ next }}" /> 
</form> 

{% endblock %} 

我得到的錯誤是這個

Reverse for ''django.contrib.auth.views.login'' with arguments '()' and keyword arguments '{}' not found. 

什麼是錯誤。以及如何刪除它?

回答

1

問題更新了很多。在這個答案的評論中看到新的答案。

模板不應該也不能處理認證用戶。您需要將表單提交到視圖。 django.auth.contrib提供了一個開箱即用的視圖。退房:https://docs.djangoproject.com/en/dev/topics/auth/

+0

我已經編輯了我的問題相當多的一點,我得到的錯誤。 – Hick 2011-06-10 07:12:52

+2

啊,您使用[url模板標籤](https://docs.djangoproject.com/zh/dev/ref/templates/builtins/?from=olddocs#url)錯誤。 '{%url'django.contrib.auth.views.login'%}'應該是不帶引號的'{%url django.contrib.auth.views.login%}'。 – Johan 2011-06-15 07:58:39