如何使用django url的可选部分并反转它

时间:2018-01-10 12:51:22

标签: python regex django

这是我的网址:

url(r'^add/(?P<year>[0-9]+)/(?P<month>[0-9]+)/(?P<day>[0-9]+)/(?P<id>[0-9]*)$', views.AddWorkoutView.as_view(), name = 'add_workout'), 

用于向数据库添加锻炼。如果提供了id,服务器应该:

  1. 检查数据库中是否存在具有id的锻炼
  2. 如果存在,请销毁找到的项目,并将其替换为已将相关数据发布到视图中的项目。
  3. 如果它不存在,只需将新的锻炼添加到数据库,而不会破坏任何现有的锻炼对象。
  4. 在我的一个名为 addworkout.html 的模板中,我有一个表格,其中插入了锻炼数据。它有以下开头标记:

    <form id="workoutform" action="{% url 'workoutcal:add_workout' date.year date.month date.day %}" method="post">
    

    如你所见,我还没有在反向网址中提供任何id参数。这是因为在 addworkout.html 中,用户只能添加新的锻炼,因此不需要现有的锻炼ID。但是,这种反转url的尝试会产生错误:

    NoReverseMatch at /workoutcal/add/2018/1/2/
    Reverse for 'add_workout' with arguments '(2018, 1, 2)' not found. 1 pattern(s) tried: ['workoutcal/add/(?P<year>[0-9]+)/(?P<month>[0-9]+)/(?P<day>[0-9]+)/(?P<id>[0-9]*)$']
    

    由于我在url中的id号旁边写了一个正则表达式星号,因此不应该提供id的任何要求。我能想到的唯一解释是,最后一个正斜杠是罪魁祸首,也许它在反转网址时没有产生。

    如果我的解释是正确的,我如何以最佳方式处理这个尾随斜线问题?

0 个答案:

没有答案