web.py源码分析: 模板(1)

463 查看

web.py模板的实现原理

web.py的模板实现利用了Python的可执行对象的动态特性:根据模板内容和渲染函数的参数创建一个函数,该函数执行的时候会返回一个TemplateResult类实例,该实例的字符串化就是模板对应的HTML内容

实验环境搭建

为了说明web.py的模板是如何实现的,我们需要在web.py的模板实现代码中加入一些打印语句来显示中间结果。Python的virtualenv工具很好的实现了这个需求。另外,我还使用了iPython,不过Python标准命令行也是可以的。环境搭建的步骤简述如下:

  • 创建virtualenv环境:virtualenv env
  • 激活virtualenv环境:cd env以及source bin/activate
  • 安装web.py:pip install web.py

这个web.py库会被安装在virtualenv环境的目录下:

下面就可以修改这个web.py的代码来看看模板到底是如何实现的。

实验代码修改

我们要修改的代码位于web/template.py文件内,找到Template类的compile_template函数(在template.py文件的第900行),加入一行打印语句:

模板函数到底长什么样?

下面我们就可以来看看模板函数到底长什么样了。当然,首先得创建一个模板文件。在我们的实验环境中进行如下操作:

现在,在templates目录下创建一个最简单的模板,文件名为hello.html,内容如下:

下面来看看根据这个模板生成的函数到底长什么样子,在实验环境下启动ipython或者python,进入到app目录: