djiango自定义标签与过滤器

版权声明:学习是一种信仰。喜欢就拿去,送人玫瑰手有余香。 https://blog.csdn.net/huoyuanshen/article/details/83615858
from django import  template #关键代码
register = template.Library()  #关键代码
from django.db.models import Count
from django.utils.safestring import mark_safe
from article.models import ArticlePost  

import markdown


#1、返回单个数字
# {% load article_tags %}  必须要有
@register.simple_tag
def total_articles():
    return ArticlePost.objects.count()
#  {% total_articles %}

@register.simple_tag
def author_total_articles(user):
    return user.article.count()
# {% author_total_articles user %}

#2、返回html代码
@register.inclusion_tag('article/list/lastest_articles.html')
def latest_articles(n=5):
    lastest_articles = ArticlePost.objects.order_by("-created")[:n]
    return {"latest_articles":lastest_articles}
#   {% latest_articles 4 %}

#3、返回对象数组
@register.assignment_tag
def most_commented_articles(n=3):
    return ArticlePost.objects.annotate(total_counts = Count('comments')).order_by('-total_comments')[:n]
# {% most_commented_articles as most_comments %}
#  {% for comment_article in most_comments %} #这个是必须的,定义变量。
#  {% endfor %}

#4,自定义过滤器
@register.filter(name='markdown') #重命名,方便前端调用,遵从使用习惯
def markdown_filter(text):  #不能是markdown,与import markdown冲突
    return mark_safe(markdown.markdown(text))
# {% article.boyd | markdown %}


猜你喜欢

转载自blog.csdn.net/huoyuanshen/article/details/83615858