Library自定义标签

创建自定义的模板标签(template tags)和过滤器(filters)

当你需要在你的模板中添加功能而Django模板标签(template tags)的核心设置无法提供此功能的时候,自定义模板标签会非常方便。

创建自定义的模板标签(template tags)

Django提供了以下帮助函数(functions)来允许你以一种简单的方式创建自己的模板标签(template tags):

simple_tag:处理数据并返回一个字符串(string)

inclusion_tag:处理数据并返回一个渲染过的模板(template)

assignment_tag:处理数据并在上下文(context)中设置一个变量(variable)

模板标签(template tags)必须存在Django的应用中。

from django import template

register = template.Library()

from ..models import Post

@register.simple_tag

def total_posts():

    return Post.published.count()

在使用自定义的模板标签(template tags)之前,你必须使用{% load %}标签在模板(template)中来加载它们才能有效。

@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.inclusion_tag注册模板标签(template tag),指定模板(template)必须被blog/post/latest_posts.html返回的值渲染

这个函数返回了一个字典变量而不是一个简单的值。包含标签(inclusion tags)必须返回一个字典值,作为上下文(context)来渲染特定的模板(template)。包含标签(inclusion tags)返回一个字典。

@register.assignment_tag

def get_most_commented_posts(count=5):

return Post.published.annotate(

total_comments=Count('comments')

).order_by('-total_comments')[:count]

聚合了每一个帖子的评论总数并保存在total_comments字段中

过滤器其实就是Python函数并提供了一个或两个参数————一个是需要处理的变量值,一个是可选的参数。它们返回的值可以被展示或者被别的过滤器(filters)处理。

from django.utils.safestring import mark_safe

import markdown

@register.filter(name='markdown')

def markdown_format(text):

return mark_safe(markdown.markdown(text))

作者:stayhungry_a883
链接:http://www.jianshu.com/p/7c6eeafdc633
來源:
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

你可能感兴趣的:(Library自定义标签)