django名称空间NoReverseMatch

时间:2014-07-26 13:00:47

标签: python django python-2.7 django-urls

我无法弄清楚我在这里做错了什么。我在Ubuntu 14.04上使用Django 1.6.5和Python 2.7.6。我有一个名为research的项目,其中包含一个名为notecards的应用程序。这是我的研究/ 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 个答案:

答案 0 :(得分: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,它更容易正常使用。