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 %}
返回单个对象: #应重点掌握方法
@register.simple_tag
def sqlApplyPerm(userId):
user = Users.objects.get(id=userId)
return user
{% sqlApplyPerm user.id as user2%}
{{ user2.username }}
#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 %}