NoReverseMatch 不是注册的命名空间,django 1.4 问题

NoReverseMatch not a registered namespace, django 1.4 issue

我被迫使用 django 1.4 来使用 neo4j,我收到一条奇怪的消息,指出 "accounts" 不是已注册的命名空间。它肯定是,就在根目录中:

from django.conf.urls import include, url
from django.contrib import admin

urlpatterns = [
    url(r'^admin/', include(admin.site.urls)),
    url(r'^accounts/', include('accounts.urls', namespace='accounts')),
]

在settings.py中:

INSTALLED_APPS = (
...
    'accounts',
)

TEMPLATE_DIRS = ( os.path.join(BASE_DIR, 'templates'), )

在项目根目录中我有 templates/accounts/index.html,这看起来是正确的,因为 template_dirs 指向该文件夹。它特别抱怨:

return render(request, 'accounts/index.html', locals()) 

它没有返回命名空间,而是返回从模板文件夹开始的模板名称。如果相关,在帐户应用程序(已安装)中,我有:

urls.py-

from django.conf.urls   import patterns, include, url
from django.contrib     import admin

urlpatterns = patterns('accounts.views',
    url(r'^$',                                      'index',                    name='index'),
    url(r'^register/$',                             'register',                 name='register'),
    url(r'^login/$',                                'user_login_page',          name='login'),
    url(r'^logout/$',                               'user_logout',              name='logout'),

)

为什么有命名空间的东西导致 NoReverseMatch 不是已注册的命名空间?

在 1.4 和其他旧版本中,{% url 'accounts:register' %} 是不允许的...只需要 {% url accounts:register %}

将此添加到您的基础 html。

{% load url from future %}