URLConf:
url(r'^body/(?P<id>\d+)/$', 'body_part_detail', name='body-part-detail'), url(r'^body/(?P<id>\d+)/(?P<slug>[-\w\d]+)/$', 'body_part_detail', name='body-part-detail'),
get_absolute_url()
实现:def get_absolute_url(self): kwargs = { 'id' : self.id, 'slug' : slugify(self.name) } return reverse('body-part-detail', kwargs=kwargs)
现在,我有两个 url
,其中 name=body-part-detail
(这可能是错误的?)。尽管如此,reverse
成功了,因为它使用第二个 url
并返回带有 slug 组件的所需 URL。为什么这行得通?在这种情况下我只是“幸运”吗(引用因为程序不应该幸运!)?
最后,在 SO 和 Web 上的几个地方,人们给出了带有 url
共享 name
关键字 arg 的 URLConfs 示例。例如,Visgean Skeloru 在这里的回答:Optional get parameters in django? .这是错误的/不好的吗?
最佳答案
reverse
函数识别您拥有 kwargs id
和 slug
以及模式名称 body-part-detail
,并返回对应于那些 kwargs 和那个名字的唯一 url。你不走运,这就是 reverse
设计的目的。
您可以为许多模式使用相同的名称,但我不认为它是如何设计的(我可以看到一个非常古老的错误票,建议 implementing a check 以确保没有任何重复).我怀疑如果您为每个模式使用唯一的名称,您的应用程序将更易于维护。看看 docs给我更多信息。
关于python - 为什么这个带有重复命名 url 条目的 URLConf/reverse() 组合有效?这样做的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14715261/