代码之家  ›  专栏  ›  技术社区  ›  limscoder

Django反向路由-解决反向路由比正向路由更不特定的情况

  •  0
  • limscoder  · 技术社区  · 15 年前

    我的路线定义如下:

    (r'^edit/(\d+)/$', 'app.path.edit')
    

    url = reverse('app.path.edit', args=('-id-',))
    

    生成的url被传递给js函数,客户端代码最终将用正确的数字id替换“-id-”。这当然行不通,因为“reverse”函数与路由不匹配,因为url被定义为包含数字参数。

    我可以更改路径以接受任何类型的参数,如下所示,但随后我失去了一些特殊性:

    (r'^edit/(.+)/$', 'app.path.edit'
    

    我可以为显示的每个项目创建一个单独的url,但我将在列表中显示许多项目,因此包含每个项目的完整url似乎是浪费带宽。

    有没有更好的策略来完成我想做的事情?

    2 回复  |  直到 15 年前
        1
  •  1
  •   Vladimir Mihailenco    15 年前

    (r'^edit/(\d+|-id-)/$', 'app.path.edit')
    

    但我通常更喜欢这样:

    (r'^edit/([^/]+)/$', 'app.path.edit') # you can still differ "edit/11/" and "edit/11/param/"
    

        2
  •  1
  •   Tiago Brandes    15 年前

    在我看来,更简单的解决方案是保留原始url,然后传递值“0”而不是“-id-”。在客户端,然后用正确的id替换'/0/'。我认为这更好,因为它不会模糊url路由,而且不会失去特定性。