zoukankan      html  css  js  c++  java
  • django 自定模板标签的注册

    首先注册方法一般都是先实例化一个template.Library。如:

    from django import template
    
    register = template.Library()


    1.注册自定义过滤器方法

    register.filter('A',b)

    filter()方法中的2个参数分别:A过滤器的名称(一个字串)和 b过滤器函数本身。


    2.注册自定义模板标签方法

    register.tag('A',b)

    tag()方法需要2个参数:模板标签的名字A和编译的函数b。


    3.注册简单标签的方法如:if ,for ,ifequal等等

    register.simple_tag(A)

    该辅助函数传递的函数只有(单个)参数,参数两边的引号(如果有的话)已被截掉了所以只可能接收到一个普通的Unicode字符串。


    4.注册包含标签的方法

    register.inclusion_tag('A.html')(B)

    inclusion_tag()方法需要2个参数:模板所在的文件A和编译的函数B。

    有时候,包含标签需要访问父模板的context.此时可用到takes_context选项,即设置takes_context=True,并且该标签不需要参数,且下面的Python函数会带一个参数:就是当这个标签被调用时的模板context.

    @register.inclusion_tag('A.html',takes_context=True)
    def jump_link(context):#此处参数必须是context
        return {
            'link':context['home_link'],
            'title':context['home_title'],
            #此处有包含指向主页的变量,即取home_link和home_title中的变量link和title的值
        }


    然后创建A.html,里面可能包含下面内容:

    XXXXX<a href="{{ link }}">{{ title }}</a>xxxxxx    该处的link和title分别取自home_link和home_title中的内容。

    如果要调用该参数,可以直接加载它的库,然后不带参数地调用它{{ jump_link }}


    5.编写自定义模板加载器

    load_template_source(template_name,template_dirs=None)

    template_name是加载模板的名称,类似于loader.get_template()或者loader.select_template()

    template_dirs是一个可选的代替TEMPLATE_DIRS的搜索目录列表

    如果加载器能够成功的加载一个模板,此时会返回一个元组(template_source,template_path),template_source:模板引擎编译的模板字符串、template_path:被加载的模板路径。若加载器加载模板失败,那么会触发django.template.TemplateDoesNotExist异常。


    注:在上面代码中看到@xxxx,这样的写法,改语法在python 2.4及以上版本中成立,即:

    @register.tag(name="A")     #A过滤器的名称(一个字串)
    def B(parser.token):
    	#.....


    或者直接写成:

    @register.tag
    def B(parser,token):
     	#......

    Django此处会使用函数名称B来作为标签名称

    此处只举一例,其他写法类似。另如有不同看法,欢迎来讨论。


  • 相关阅读:
    【Thymeleaf/SpringBoot/MyBatis】如何将themeleaf页面的表单数据提交到后台处理
    【Oracle】生成连续序列的两种方法
    【oracle】统计字段里逗号的数量,采用函数regexp(field,',')
    人的成长与发展不会一帆风顺,坚守理想和信念,不以一时颠簸为意,才能更好地走向未来。
    【SpringBoot/Thymeleaf】如何使SpringBoot程序显示网页
    【jQuery/Thymeleaf】在Thymeleaf页面用jQuery的Ajax方法取得后台数据显示在页面上
    JavaScript常用正則表達式
    CSS的入門
    ASP操作xml之如何生成XML数据
    ISAPI筛选器及对ASP源文件的保护
  • 原文地址:https://www.cnblogs.com/fuhaots2009/p/3503486.html
Copyright © 2011-2022 走看看