自定义模板标签和过滤器
-
自定义模板标签种类
- 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 }}

浙公网安备 33010602011771号