我试图创建一个简单的应用程序,只允许登录现有用户和注销,如果登录。在
在视图.py在
from django.views.generic.edit import FormView
from django.views.generic import DetailView
from django.contrib.auth import logout
from django.contrib.auth.models import User
from django.contrib.auth.forms import AuthenticationForm
from django.core.urlresolvers import reverse_lazy
from django.http import HttpResponseRedirect
class UserDetailView( DetailView ):
model = User
template_name = "main/user_detail.html"
class UserLoginView( FormView ):
form_class = AuthenticationForm
success_url = reverse_lazy("UserDetails")
template_name = "main/user_form.html"
def logout_view(request):
logout(request)
return HttpResponseRedirect('/login/')
在网址.py在
^{pr2}$用户_表单.html在
{% if user.is_authenticated %}
<a href="{% url 'Main:UserLogOut' %}">Logout</a>
{{ user.username }}
{% else %}
<form method='post'> {% csrf_token %}
<table>
{{ form.as_table }}
</table>
<input type='submit' value='Submit'>
</form>
{%endif%}
我不知道为什么,但是服务器返回这个错误
Request Method: POST
Request URL: http://0.0.0.0:9000/login/
Django Version: 1.6.5
Exception Type: NoReverseMatch
Exception Value:
Reverse for 'UserDetails' with arguments '()' and keyword arguments '{}' not found. 0 pattern(s) tried: []
怎么了?在
升级版
我尝试了这个肮脏的黑客攻击success_url = reverse_lazy("Main:UserDetails", kwargs={ 'pk':1 } )
,只是为了检查它是否有效。我还补充了
{% if user.is_authenticated %}
Hooray!
{% else %}
What the hell???
{% endif %}
对用户_详细信息.html不知为什么得到了什么???而不是万岁! 为什么身份验证表单并没有真正对用户进行身份验证?在
在你的urlconf中的这一行
您将UserDetails的url定义为“something/users/pk”。但是,您没有为该url提供pk参数。这就是为什么你的错误说找不到相反的结果,因为它试图找到一个没有参数的模式。在
有几种方法可以修复您的错误,但我认为最好的解决方案是将pk参数设为可选,如下所示:
^{pr2}$希望这有帮助。在
我认为问题出在这个声明中
您需要提供user pk来反转_lazy args,因为URL的格式是“users/user_id/”。 所以不可能找到正确的成功网址。在
相关问题 更多 >
编程相关推荐