是自己解析网址而不是urlpattern匹配组的好方法吗?

时间:2014-10-12 06:30:19

标签: django django-urls

我们假设我正在构建一个博客应用并创建以下网址模式:

url(r'^(?P<category>.+?)/(?P<date>.+)$', views.post_list, name='post_list'),

然后我创建了多个模板,随处可见:

{% url 'myapp:post_list' category date %}

但是我觉得嗯......我不想在那里约会,而是让它<category> and <slug>

然后我必须在我的模板中到处更改相应的{%url标记!

像这样重写url正则表达式会不会更好:

url(r'^(?P<url>.+?/.+)$', views.post_list, name='post_list'),

并在某处定义一些url_split()函数,它会在视图中解析它,将url()方法或属性添加到相应的模型中,并能够使用以下url标记:

{% url 'myapp:post_list' obj.url %}

因此,如果我想更改我的网址正则表达式/参数等内容,请不要触摸它们? 这是好的设计还是我错过了什么?

1 个答案:

答案 0 :(得分:2)

  

但是我觉得嗯......我不想在那里约会,就这样吧   而是。

     

然后我必须在我的所有地方更改相应的{%url标签   模板!

为什么这是一个问题?

  

这是好的设计

不,不是:

  1. 功能变得模棱两可。它一下子做了太多事。
  2. 您正在复制框架中已有的功能。
  3. 您现在可以通过创建“一揽子”全部捕获请求方法来有效地创建一个阻塞点。在这种方法中,会有一堆决策树if / else子句,这样的分支是bug的主要部分。
  4. 这样做的全部目的是为了一些可能会或可能不会发生的想象用例。
  5. 来自xkcd # 974

    enter image description here