2011-07-16 109 views
1

有人輸入www.example.com/3/追加基於唯一ID slugyfied字段添加到URL中的Django

我有,我可以slugify一個charfield的典範。

class Mymodel(models.Model): 
    title = models.CharField(max_length=200) 

我怎麼可以重寫URL作爲在Django www.example.com/3/title-of-selected-id

我是在urls.py還是在views.py中執行它?所有我能想到的是使2種模式這樣

(r'^mymodels/(?P<mymodel_id>\d+)/(?P<name_slug>[\w-]+)$', 'app.views.detail'), 
(r'^mymodels/(?P<mymodel_id>\d+)/$', 'app.views.rewrite'), 

然後在我的app.views.rewrite我會得到爲MyModel標題,slugify並重定向到第一個URL。但這似乎非常髒

回答

0

通過#django irc有人告訴我,重定向方法並不壞,我們想不到另一個簡單的方法,所以我只是編寫了一些似乎工作的東西。

#urls.py 
(r'^mymodels/(?P<mymodel_id>\d+)/$', 'app.views.detail'), 
(r'^mymodels/(?P<mymodel_id>\d+)/(?P<name_slug>[\w-]+)/$', 'app.views.detail'), 

#views.py 
def detail(request, mymodel_id, name_slug=None): 
    mymodel = get_object_or_404(Mymodel, pk=mymodel_id) 

    slug = slugify(mymodel.title) 

    if slug == name_slug: 
     return HttpResponse("model number %s." % mymodel_id) 
    else: 
     return redirect(reverse('app.views.detail', args=[mymodel_id, slug]), permanent=True)