2011-06-10 67 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