Django, пользовательский тег... как?
Я хотел бы сделать пользовательский тег django для отображения 10 названий записей из категории, в которой пользователь читает статью. Как я могу это сделать? Мне нужно передать категорию из фактической записи.
3 ответа
Лучший способ сделать это - использовать тег включения. Это тег, который отображает фрагмент шаблона, который отображает 10 связанных статей.
Вы просто передаете текущую статью в тег и возвращаете контекст для фрагмента шаблона, то есть связанных статей.
@register.inclusion_tag('related_articles.html')
def related_articles(article, count):
category = article.category
articles = category.article_set.exclude(id=article.id)[:count]
return {'articles': articles}
Вам понадобится файл related_articles.html в каталоге шаблонов, который выводит статьи. Затем, чтобы вызвать его из вашего основного шаблона, вы просто
{% related_articles article 10 %}
где article
Имя объекта статьи.
Почему пользовательский тег? Возможно, лучше, чище, добавить метод в модель статьи и вызвать его из шаблона. В зависимости от вашей модели, метод будет практически тривиальным.
Проверьте здесь для создания пользовательских тегов:
http://docs.djangoproject.com/en/dev/howto/custom-template-tags/
Вам нужно будет передать соответствующий объект категории в контекст шаблона.