Search code examples
djangodjango-templatesdjango-custom-tags

Django, custom tag... how?


I would like to make a django custom tag to display 10 entry titles from the category where the user is reading an article. How can I do this? I need to pass the category from the actual entry.


Solution

  • The best way to do this would be with an inclusion tag. This is a tag that renders a template fragment which renders the 10 related articles.

    You just pass in the current article into the tag, and return the context for the template fragment - ie the related articles.

    @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}
    

    You'll need a related_articles.html file in your templates directory which outputs the articles. Then, to call it from your main template, you would just do

    {% related_articles article 10 %}
    

    where article is the name of the article object.