Добавить затянувшееся поле на основе уникального идентификатора в URL в Django - PullRequest
1 голос
/ 16 июля 2011

Кто-то вводит www.example.com/3/

У меня есть модель с полем символов, которое я могу убить.

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

Как мне переписать URL как www.example.com/3/title-of-selected-id в Django?

Я делаю это в 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, вставил его и перенаправил на первый URL.Но это кажется ужасно грязным

1 Ответ

0 голосов
/ 17 июля 2011

Через #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)
...