Django反向路由 - 解决方案,其中反向路由不如前向路由特定

时间:2010-10-08 18:06:31

标签: django

我的路线定义如下:

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

我想使用反向函数如下:

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

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

我可以改变路线接受任何类型的参数如下,但后来我松了一些特殊性:

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

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

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

2 个答案:

答案 0 :(得分:1)

您可以像这样重写正则表达式:

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

但我通常更喜欢这个:

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

通常你无论如何都需要使用get_object_or_404快捷方式或类似方法检查实体是否存在,所以唯一不好的是你必须对传入数据更准确,因为id几乎可以包含任何字符。

答案 1 :(得分:1)

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

相关问题