有人输入www.example.com/3/
我有一个带有charfield的模型,我可以进行击打。
class Mymodel(models.Model):
title = models.CharField(max_length=200)
如何在Django中将URL重写为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标题,将其重新标记并重定向到第一个网址。但这看起来非常糟糕
答案 0 :(得分: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)