Django:使用重复的slug管理像id:slug这样的URL

时间:2013-04-05 12:19:32

标签: django url django-urls slug

使用Django 1.5我将slug存储在DB

我将我的网址配置如下:

url(r'^(?P<id>[0-9]+):(?P<slug>[-\w]+)$', TracksDetailView.as_view(), name="track-view"),

在我的podel中我有:

@models.permalink
def get_absolute_url(self):
    return ('track-view', [str(self.id), str(self.slug)])

如果2个slug相同,我会收到以下错误:

get() returned more than one GPXTrack -- it returned 2! Lookup parameters were {}

我使用通用视图(DetailView)来呈现页面:

class TracksDetailView(DetailView):
    model = GPXTrack
    context_object_name = 'track'

如何避免这种而不需要独特的slu <

2 个答案:

答案 0 :(得分:0)

您必须覆盖视图的get_object方法。您继承的那个没有考虑到您正在使用ID和slug。它假设你传递了一个pk或一个slu - 而且还假设它们是唯一的。

答案 1 :(得分:0)

诀窍很简单,但感谢你指出了正确的方向!

方法get_object寻找带有键'pk'而非'id'的kwargs,因此我将我的网址更改为:

url(r'^(?P<pk>[0-9]+):(?P<slug>[-\w]+)$', TracksDetailView.as_view(), name="track-view"),

一切正常!