Ответ 1
@permalink
- это декоратор, а get_absolute_url
- метод для модели django.
И то, и другое касается разрешения перевернуть URL для определенного объекта и должно использоваться вместе. Они используются в любое время, когда вам нужно предоставить ссылку на конкретный объект или показать пользователю определенный URL-адрес этого объекта (если он есть)
Вы можете просто написать свой метод get_absolute_url
, чтобы вернуть жестко закодированную строку, но это не будет соответствовать философии Django относительно DRY (не повторяйте себя). Вместо этого есть @permalink
, чтобы сделать вещи более гибкими.
Если вы прочитаете документы по теме, вы увидите, как они связаны друг с другом. декоратор @permalink
подключается к бэкэнду django URLconf, позволяя писать гораздо более переносимый код с помощью шаблонов именованных URL. Это предпочтительнее, чем просто использовать get_absolute_url
: ваш код становится намного СУХИМ, так как вам не нужно указывать пути.
class BlogPost(models.Model):
name = modelsCharField()
slug = models.SlugField(...)
@permalink
def get_absolute_url(self):
return ("blog-detail", [self.slug,])
и в urls.py
...
url(r'/blog/(?P<slug>[-w]+)/$', blog.views.blog_detail, name="blog-detail")