简单Django应用中的NoReverseMatch异常

0 投票
1 回答
535 浏览
提问于 2025-04-19 08:28

我想先说,我在这个论坛上看了很多关于这个异常的讨论,但还是找不到解决办法。不知道我漏掉了什么。

这是我应用中的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服务器、换成双引号/单引号/不加引号等等)。但是我还是看不到错误。

这段代码是从一个CRUD示例复制过来的,我使用的是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

1 个回答

1

在你的基础 urls.py 文件中,你用命名空间包含了应用的 URL,所以在模板里也应该使用这个命名空间。在你的例子中,应该这样写: <a href="{% url 'people:people_list' %}">Index</a>

关于命名空间的更多信息,可以查看这里: https://docs.djangoproject.com/en/1.6/topics/http/urls/#url-namespaces

撰写回答