NoReverseMatch 在渲染 Django 管理屏幕时?

Posted

技术标签:

【中文标题】NoReverseMatch 在渲染 Django 管理屏幕时?【英文标题】:NoReverseMatch while rendering the Django admin screen? 【发布时间】:2011-08-18 22:05:21 【问题描述】:

运行 Python 2.5 Django 1.2.4

测试基本设置时出现错误消息。第一次在浏览器中输入 /admin URL 时,我收到错误消息:

在模板 c:\dd\ddproject\src\templates\admin\base_site.html 中,第 10 行出错

渲染时捕获 NoReverseMatch:“django.contrib.auth.views.logout”的反向参数“()”和关键字参数“”未找到。

异常位置:C:\Python25\lib\site-packages\django\template\defaulttags.py 在渲染中,第 385 行

这是第 10 行的代码

<a href="% url django.contrib.auth.views.logout %">% trans 'Log out' %</a> 

我不愿意包含我的整个 settings.py 文件。但要回答您的下一个问题,以下是相关设置:

MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
 )

 ROOT_URLCONF = 'src.urls'

 TEMPLATE_DIRS = (
     "/dd/ddproject/src/templates",
 )

 INSTALLED_APPS = (
     'django.contrib.auth',
     'django.contrib.contenttypes',
     'django.contrib.sessions',
     'django.contrib.sites',
     'django.contrib.messages',
     'django.contrib.admin',
     'django.contrib.admindocs',
 )

【问题讨论】:

【参考方案1】:

如果您在没有提示的情况下将settings.py 包含在您的问题中,那么您就不能成为新手 :-)

如果您没有定义自己的登录/注销网址,请记住在您的 urls.py 文件中包含 auth 网址。最好最后这样做:

from django.conf.urls.defaults import *

urlpatterns = patterns('',
    # ... other URL defs and includes here ....
    (r'', include('django.contrib.auth.urls')),
)

【讨论】:

谢谢,杰瑞特。不,我的 url 配置中没有 auth url。我已经定义了一个 r'' 正则表达式以将我带到我的问候屏幕(我认为它就像输入的任何没有匹配正则表达式的 url 的通配符。)你是说我可以定义 2 个 url在带有 r'' 正则表达式的 urls.py 中? 您建议的修复方法奏效了,Jarret。我现在也看到了 r' ' 正则表达式是什么。让我从 'django.contrib.auth.urls' 中提取更多 url 谢谢!【参考方案2】:

需要在urls.py中添加:

#Session management
(r'^login/$','django.contrib.auth.views.login'),

或者你正在使用

(r'^admin$',include(admin.site.urls)),
(r'^admin/$',include(admin.site.urls)),

而不是:

(r'^admin',include(admin.site.urls)),

【讨论】:

【参考方案3】:

我将此行添加到我的 urls.py 并解决了问题: url('', include('django.contrib.auth.urls')), 我正在使用 Django 1.5

【讨论】:

【参考方案4】:

解决这个问题的方法是在 settings.py 的 INSTALLED_APPS 中使用绝对路径。所以:

'myproject.myapp',

而不是

'myapp',

【讨论】:

以上是关于NoReverseMatch 在渲染 Django 管理屏幕时?的主要内容,如果未能解决你的问题,请参考以下文章

渲染时 NoReverseMatch:“django.contrib.auth.views.login”的反向

在 Django 中使用 % url % 时的 NoReverseMatch

django 偶尔会抛出一个 NoReverseMatch

如何修复 NoReverseMatch Django 错误?

Django 捕获 NoReverseMatch - TemplateSyntaxError

包含收藏按钮后的 NoReverseMatch