文件名称:自定义模板标签的高级方式-libmodbus源码解析
文件大小:7.37MB
文件格式:PDF
更新时间:2024-07-14 01:47:21
8.8自定义模板标签的高级方式 有时,这些自定义模板标签的方式不够用。为了让你能从头开始构建模板标签,Django 提供了模板系统的完 整内部细节。 8.8.1概览 模板系统的运作分为两步:编译和渲染。因此,自定义模板要指定如何编译和渲染。Django 编译模板时,把 原始模板分解为一个个“节点”。节点是 django.template.Node实例,有一个 render()方法。编译好的模板其 实就是一些 Node对象。 在编译好的模板对象上调用 render()方法时,模板在节点列表中的各个 Node对象上调用 render()方法,并 传入指定的上下文。最后,把各个节点的输出拼接在一起,组成模板的输出。因此,自定义模板标签时,要 指定如何把原始模板转换成 Node对象(编译),并且指定节点的 render()方法要做什么(渲染)。 8.8.2编写编译函数 模板解析器遇到模板标签时,调用一个 Python 函数,并且传入标签的内容和解析器对象自身。这个函数负责 根据标签的内容返回一个 Node实例。下面我们将从头开始实现前面那个简单的模板标签 {% current_time %},根据参数中以 strftime()句法指定的格式显示当前日期和时间。开始行动之前,最好确定标签的句法。 这里,假设将像下面这样使用这个标签:
The time is {% current_time "%Y-%m-%d %I:%M %p" %}.
这个函数的解析器应该获取参数,然后创建一个 Node对象: from django import template 128 - 第 8 章 高级模板技术