Абсолютные ссылки Django

категория: Django
Надоело писать длинный путь к ссылкам которые имеют несколько этажей вложенности, получалось в шаблоне типа:
/{{ article.category.slug }}/{{ article.slug }}
И оно может довольно сильно разрастись со временем. Подсказали, что есть абсолютные посылания Django c помощью get_absolute_url(). И действительно это не заменимая штука. Придется в шаблоне писать только:
href="{{ article.get_absolute_url }}"
Url к странице будет к примеру такой:
url(r'^(?P<category_slug>[-\w]+)/(?P<article_slug>[-\w]+)/$', 
		'core.views.article', name='article_detail'),
В модели просто определяем метод по имени юерел патерна 'article_detail':
@models.permalink
def get_absolute_url(self):
    return ('article_detail', (), {
        'category_slug': self.category.slug,
        'article_slug': self.slug
    })
Очень полезная штука, да и зачем усложнять себе жизнь. Только не забываем принять и использовать эти аргументы, что-то типа:
def article(request, post_slug, category_slug):
    article = get_object_or_404(Article, slug=article_slug, 
        category__slug=category_slug)
Здесь связь моделей Category и Article идет через ForeignKey - если с первого взгляда не увидели.


blog comments powered by Disqus