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/

Вам нужно будет передать соответствующий объект категории в контекст шаблона.

Другие вопросы по тегам