Django命名空间 NoReverseMatch

1 投票
1 回答
569 浏览
提问于 2025-04-18 14:52

我搞不清楚我哪里出错了。我在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,这个用起来更简单。

撰写回答