美文网首页
Library自定义标签

Library自定义标签

作者: lkning | 来源:发表于2017-12-21 16:31 被阅读0次

    创建自定义的模板标签(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自定义标签

          本文链接:https://www.haomeiwen.com/subject/himawxtx.html