在Django中自定义模板标签

1.在该应用(app)文件夹下面建立templatetags文件夹,在其中建立两个py文件,一是init.py,二是article_tags.py(自定义)文件。
2.在article_tags.py中键入如下代码:

from django import template
from django.db.models import Count

register = template.Library()

from article.models import ArticlePost


@register.simple_tag
def total_articles():
    return ArticlePost.objects.count()


@register.simple_tag
def author_total_articles(u):
    return u.article.count()


@register.inclusion_tag('article/list/latest_articles.html')
def latest_articles(n=5):
    l_articles = ArticlePost.objects.order_by('-created')[:n]
    return {'latest_articles': l_articles}


@register.assignment_tag
def most_commented_articles(n=3):
    return ArticlePost.objects.annotate(total_comments=Count('comments')).order_by('-total_comments')[:n]

3.article/list/latest_articles.html中代码如下:


4.在使用自定义模板标签时,首先在模板文件中键入{% load article_tags %},接着可在适用的地方使用诸如{% total_articles %},{% latest_articles 4 %}等标签。

你可能感兴趣的:(在Django中自定义模板标签)