自定义模板标签和过滤器

  • 自定义模板标签种类

    • simple_tag
    • inclusion_tag
    • assignment_tag
  • 在app下创建templatetags包, blog_tags.py

  • 定义

blog_tags.py

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

from ..models import Post
register = template.Library()


@register.simple_tag
def total_posts():
    return Post.published.count()


@register.inclusion_tag('blog/post/latest_posts.html')
def show_latest_posts(count=5):
    latest_posts = Post.published.order_by('-publish')[:count]

    return {'latest_posts': latest_posts}


@register.assignment_tag
def get_most_commented_posts(count=5):
    return Post.published.annotate(total_comments=Count('comments')).order_by('-total_comments')[:count]
  • 使用
list.html

{% load blog_tags %}

{% total_posts %}


base.html

{% show_latest_posts 2 %}

{% get_most_commented_posts 2 as most_commented_posts %}
{% for post in most_commented_posts %}
	{{ post.title }}
{% endfor %}
  • 安装markdown
pip install Markdown==2.6.2
  • 自定义模板过滤
blog_tag.py

from django.utils.safestring import mark_safe
import markdown

@register.filter(name='markdown')
def markdown_format(text):
    return mark_safe(markdown.markdown(text))
  • 使用
list.html
{% load blog_tags %}

{{ post.content|markdown|truncatewords_html:30 }}


detail.html

{% load blog_tags %}

{{ post.content|markdown }}
posted @ 2018-09-15 22:06  ret  阅读(82)  评论(0)    收藏  举报