django模板抛出NoReverseMatch错误

时间:2013-09-27 22:40:53

标签: django django-templates django-views

我在视图中创建和更新了两个方法,其中up​​date采用一个参数,而create不采用任何方法。我已经决定将它们变成只有一个函数update_create,因为它们并没有那么不同。

这是视图中新方法的外观:

  def update_create(request, id=None):

这是我的urls.py:

  url(r'^(\d+)/update/$|create/$', update_create, name='update_create'),

这是我的模板在templates / list.html中的外观

  <a href="{% url 'update_create' %}"> Create a new event </a>

使用上面的代码时出现此错误:

  NoReverseMatch at /agenda/list/
  Reverse for 'update_create' with arguments '()' and keyword arguments '{}' not found.

但是,如果我在我的模板中使用它(我添加了一个参数),它的工作没有任何错误:

  <a href="{% url 'update_create' 1 %}"> Create a new event </a>

有人可以解释发生了什么吗?为什么以前的代码不起作用,为什么新代码有效?

2 个答案:

答案 0 :(得分:2)

网址格式(\d+)期望将数字作为参数提供。要解决此问题,只需提供以下网址:

url(r'^(\d+)/update/$', update_create, name='update_create'),
url(r'^update/$', update_create, name='update_create'),

答案 1 :(得分:1)

正如mariodev指出的那样,你的网址模式在网址前面有一个数字。因此,您的第一个网址:

<a href="{% url 'update_create' %}"> Create a new event </a>

会生成一个像/ update这样的网址,这不是一个有效的网址。但是,后一个网址:

<a href="{% url 'update_create' 1 %}"> Create a new event </a>

会生成一个像/ 1 / update这样的网址,这是一个有效的网址。

来自django docs:https://docs.djangoproject.com/en/dev/topics/http/urls/

基本上后续参数在先到先服务中解析,并传递给您的视图。开发时要考虑的另一件事是使用明确命名的参数,正如django文档所详述的那样。