在简单的Django应用程序中的NoReverseMatch异常

问题描述:

让我先说我已经阅读了许多与此论坛有关的例外,并且仍然无法找到解决方案。不知道我错过了什么。在简单的Django应用程序中的NoReverseMatch异常

这里是我的应用程序的urls.py:

from django.conf.urls import patterns, url, include 
from django.core.urlresolvers import reverse 
urlpatterns = patterns('', 
     url(r'^$', PeopleList.as_view(), name='people_list'), 
    ) 

这是产生错误的模板代码:

<a href="{% url 'people_list' %}">Index</a> 

我得到的错误是

Reverse for 'people_list' with arguments '()' 
and keyword arguments '{}' not found. 0 pattern(s) tried: [] 

我通过这个错误读了很多帖子,并尝试了几件事情(重新启动Web服务器,改为双引号/单引号/不含引号等)。但我无法看到错误。

此代码复制自a CRUD example,我使用的是django 1.6.4。

视图代码是:

from django.views.generic.list import ListView 
from people.models import Category, Person 
from django.views.generic.edit import CreateView, UpdateView, DeleteView 
from people.forms import CategoryForm, PersonForm 
from django.views.generic.detail import DetailView 
from django.shortcuts import get_object_or_404 
from django.core.urlresolvers import reverse 

class PeopleList(PersonMixin, ListView): 
    template_name = 'people/object_list.html' 

实际上代码是从所述链路:http://www.pythondiary.com/tutorials/simple-crud-app-django.html。但我使用django 1.6。

在变化,我做的是从

from django.conf.urls.defaults import patterns, url, include 

我改

from django.conf.urls import patterns, url, include 
+0

您可以分享您正在使用的视图或表单代码来将'people_list''传递给您的模板吗? – br3w5 2014-09-02 08:26:19

+0

ssbrewster,通过添加代码来回答你的问题。我也已经从我复制这个代码的地方给出了教程的链接。 – mht 2014-09-02 08:37:34

+0

@mht,在settings.py中检查你的'ROOT_URLCONF'。它对应于你的urls.py吗? – stalk 2014-09-02 08:53:28

在你的基地urls.py包括你的应用程序的命名空间的网址,因此在模板中,你应该使用命名空间太。在你的情况下: <a href="{% url 'people:people_list' %}">Index</a>

有关命名空间的更多信息:https://docs.djangoproject.com/en/1.6/topics/http/urls/#url-namespaces

+0

此外,人们应该确保在URL命名空间之后使用冒号,在这种情况下使用'people:'。我使用点('.')代替了相当多的时间调试。 – 2014-11-28 03:48:32