我在视图中创建和更新了两个方法,其中update采用一个参数,而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>
有人可以解释发生了什么吗?为什么以前的代码不起作用,为什么新代码有效?
答案 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文档所详述的那样。