Django命名空间 NoReverseMatch
我搞不清楚我哪里出错了。我在Ubuntu 14.04上使用Django 1.6.5和Python 2.7.6。我有一个叫做research的项目,里面有一个叫notecards的应用。以下是我的research/urls.py
from django.conf.urls import patterns, include, url
from django.contrib import admin
admin.autodiscover()
urlpatterns = patterns('',
# Examples:
# url(r'^$', 'research.views.home', name='home'),
# url(r'^blog/', include('blog.urls')),
url(r'^admin/', include(admin.site.urls)),
url(r'^notecards/', include('notecards.urls', namespace='notecards')),
)
这是在notecards/views.py中对它的调用
def new_note(request):
if request.method == 'GET':
form = NotecardForm()
else:
form = NotecardForm(request.POST)
if form.is_valid():
content = form.cleaned_data['content']
source = form.cleaned_data['source']
page = form.cleaned_data['page']
tags = form.cleaned_data['tags']
return HttpResponseRedirect(reverse('notecards:index', ()))
return render(request, 'notecards/new_note.html', {'form': form,
})
我遇到的错误是:u'notecards' 不是一个注册的命名空间。我一定是漏掉了什么明显的东西,但我就是想不明白。
1 个回答
2
在你的代码中,把 reverse('notecards:index', ())
改成 reverse('notecards:index')
。这里的 reverse
的用法是这样的:
reverse(viewname, urlconf=None, args=None, kwargs=None, prefix=None, current_app=None)
你会发现 urlconf
错误地把 ()
当成了参数,而应该是 args
。
另外,可以看看 django.shortcuts.resolve_url
,这个用起来更简单。