webpy template
2016-08-17
介绍
过程
还是todo的例子。
1
2
3
4
5
6
7
8render = web.template.render(‘templates’, base=‘base’)
class Index:
…
def GET(self):
…
return render.index(todos, form)
render = web.template.render('templates', base='base')
创建了一个Render实例
render.index(todos, form)
对应
1 | class Render: |
- 如果没有base,返回一个名为index的Template(),所以是
Template()__call__(todos, form)
; - 有base的情况下,是
Template()__call__(Template()__call__(todos, form))
,外面的是base的,里面的是index。上述表达是错误的,这样好理解。
下面具体介绍:
在没有base的情况下,
Template
的初始化的地方是Template(open(path).read(), filename=path, **self._keywords)
* generate_code
找到 def with,read_suite,将def with替换成
1
2
3
4
5
6def template (todos, form):
lineoffset = -4
loop = ForLoop()
self = TemplateResult(); extend_ = self.extend
…
return self
在头部加上# coding: utf-8\n
,解析中间的python code- compile
编译成Code对象,Template()__call__(todos, form)
的时候将todo、form作为该方法__template__
的参数,返回一个TemplateResult
2. 有base的情况下,将index返回的self(即一个TemplateResult的实例)作为新的__template__
的参数,返回一个TemplateResult
- compile
最后,TemplateResult
作为一个可迭代的对象,传递给client