上一篇文章web.py源码分析: 模板(1)说明了web.py的模板的大致工作原理。本文重点讲述web.py模板支持的语法是如何转换生成__template__函数的。
本章会列出模板内容以及转换之后的__template__()函数的内容,以及必要的文字说明。模板的名称统一是hello.html。
模板内容
12 | hello, world |
函数内容
12345678 | def __template__(): __lineoffset__ = –5 loop = ForLoop() self = TemplateResult(); extend_ = self.extend extend_([u\’hello, world\\n\’]) return self |
模板内容
123 | $def with (name, value=[], *args, **kargs)hello, $name |
函数内容
12345678 | def __template__ (name, value=[], *args, **kargs): __lineoffset__ = –4 loop = ForLoop() self = TemplateResult(); extend_ = self.extend extend_([u\’hello, \’, escape_(name, True), u\’\\n\’]) return self |
从生成的函数可以看出,def with语法所生成的就是__template__()函数的参数列表。
模板内容
123456 | $def with (name, value)$name${name + value}$(name + value)ing.$name[value].function() |
函数内容
1234567891011 | def __template__ (name, value): __lineoffset__ = –4 loop = ForLoop() self = TemplateResult(); extend_ = self.extend extend_([escape_(name, True), u\’\\n\’]) extend_([escape_((name + value), True), u\’\\n\’]) extend_([escape_((name + value), True), u\’ing.\\n\’]) extend_([escape_(name[value].function(), True), u\’\\n\’]) return self |
表达式的替换就是执行表达式(表达式对应的代码),得到的结果添加到TemplateResult实例中。
模板内容