Django NoReverseMatch 与认证

0 投票
1 回答
502 浏览
提问于 2025-04-18 12:17

我正在处理一个简单的登录应用程序。我可以正常登录和登出。问题是,当我登出后,想测试一下如果尝试访问一个只有登录用户才能看到的页面,会发生什么,我收到了一个 NoReverseMatch 异常。我查看了文档,上面写着:‘NoReverseMatch 异常是由 django.core.urlresolvers 引发的,当根据提供的参数无法在你的 URL 配置中找到匹配的 URL 时。’这是我的 URL 设置:

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

url(r'^index/', login_required(Index.as_view(template_name= "index.html")), name = 'index'),

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

问题是我不知道应该在哪里设置那些想要访问受保护页面但没有登录的用户的 URL。我已经尝试过 "Login_required"(如你在 URL 中看到的),还尝试过其他的混合类,比如来自 braces 的 'LoginRequiredMixin' 和 Stronghold,但都没有成功。我想做的就是把那些没有登录并试图绕过系统的用户重定向到 login.html。我在 settings.py 中有这些设置,也许能帮到我:

APPEND_SLASH = True

TEMPLATE_DEBUG = True

LOGIN_URL = 'login'


LOGIN_REDIRECT_URL = 'index'


LOGOUT_URL = 'logout'

我知道这个问题可能有点宽泛,抱歉。需要任何其他信息请告诉我。非常感谢你。

编辑:这是 Django 显示的内容:

NoReverseMatch 在 /Exi/index/
对于 'login' 的反向查找,参数 '()' 和关键字参数 '{}' 未找到。尝试了 0 个模式: []
请求方法:GET
请求 URL:SO 不让我在这里显示链接
Django 版本:1.6.5
异常类型:NoReverseMatch
异常值:
对于 'login' 的反向查找,参数 '()' 和关键字参数 '{}' 未找到。尝试了 0 个模式: []
异常位置:C:\Users\Python\Desktop\TestScene\lib\site-packages\django\core\urlresolvers.py 的 _reverse_with_prefix,第 452 行
Python 可执行文件:C:\Users\Python\Desktop\TestScene\Scripts\python.exe
Python 版本:2.7.6
Python 路径:
['C:\Users\Python\Desktop\TestScene\ExiAdmin',
'C:\Users\Python\Desktop\TestScene\lib\site-packages\mysql_python-1.2.5-py2.7-win32.egg',
'C:\Windows\system32\python27.zip',
'C:\Users\Python\Desktop\TestScene\DLLs',
'C:\Users\Python\Desktop\TestScene\lib',
'C:\Users\Python\Desktop\TestScene\lib\plat-win',
'C:\Users\Python\Desktop\TestScene\lib\lib-tk',
'C:\Users\Python\Desktop\TestScene\Scripts',
'C:\Python27\Lib',
'C:\Python27\DLLs',
'C:\Python27\Lib\lib-tk',
'C:\Users\Python\Desktop\TestScene',
'C:\Users\Python\Desktop\TestScene\lib\site-packages']

1 个回答

0

你需要在登录网址的定义后面加上 name='login',就像你在首页的网址定义中做的那样。同样的,登出的网址也要这样处理。

撰写回答