この同様の方法は、数値 ID フィールドを使用する URL と下位互換性があります。
models.pyにスラッグ フィールドと保存定義を追加します。
from django.template.defaultfilters import slugify
slug = models.SlugField(default='no-slug', max_length=60, blank=True)
def save(self, *args, **kwargs):
#save a slug if there is no slug or when it's 'no-slug' (the default slug)
if not self.slug or self.slug == 'no-slug':
self.slug = slugify(self.name)
super(Project, self).save(*args, **kwargs)
urls.pyに 2 つ目のURL パターンを追加します。
#original:
url(r'^(?P<id>\d+)/$', 'project.views.view', name='view_url'),
#new pattern added under original:
url(r'^(?P<id>\d+)-(?P<slug>[-\w\d]+)/$', 'project.views.view', name='view_url'),
views.py でスラッグを通過させます:
def view(request, mid=None, slug=None):
次に、この URLパターンを使用するために必要なことは、models.py を編集することだけです。
def get_absolute_url(self):
return reverse('view_url', args=[self.id, self.slug])