• 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来作为标签名称

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


  • 相关阅读:
    Ubuntu18.04 环境下 解决VScode中空格长度减小的问题
    IPython notebook(Jupyter notebook) 设置密码
    IPython notebook(Jupyter notebook)指定IP和端口运行
    ubuntu系统下 vscode中如何指定conda环境
    《Bitcoin: A Peer-to-Peer Electronic Cash System》 中本聪写的比特币白皮书
    QT-vs各个版本的编译器号对应的vs版本号
    惯性导航的组成
    论文引用格式
    SCI正刊和特刊(专刊/增刊)的区别是什么?
    python glob.glob() 函数
  • 原文地址:https://www.cnblogs.com/fuhaots2009/p/3503486.html
Copyright © 2020-2023  润新知