如何在猎豹模板中使用继承?

时间:2018-06-21 08:22:22

标签: python templates inheritance cheetah

对于Cheetah3,有一个非常粗糙的继承功能文档:http://cheetahtemplate.org/users_guide/inheritanceEtc.html#extends

但是我不知道如何使其真正起作用。

假设我有两个模板文件:

A.tmpl

#def message
Hello Cheetah
#end def
This is an example: $message

B.tmpl

#extends A
#def message
Hello Cheetah with Inheritance
#end def

和一个简单的驱动程序,例如:

from Cheetah.Template import Template

t = Template(file='B.tmpl')
print t

显然,这是行不通的,因为执行此代码时没有A类。

但是进展如何?还是只有通过预编译的Cheetah模板才能进行继承?

1 个答案:

答案 0 :(得分:1)

有两种方法可以从另一个模板导入一个模板。

  1. 使用*.py命令行程序将所有模板编译为cheetah compile个文件。然后导入可以在Python级别进行。

要在编辑所有模板后半自动编译它们,我建议使用以下Makefile(GNU风格):

.SUFFIXES: # Clear the suffix list
.SUFFIXES: .py .tmpl

%.py: %.tmpl
        cheetah compile --nobackup $<
        python -m compile $@

templates = $(shell echo *.tmpl)
modules = $(patsubst %.tmpl,%.py,$(templates))

.PHONY: all
all: $(modules)

(别忘了-makefile要求使用制表符而不是空格进行缩进。)

  1. Subversion Python导入可直接从*.tmpl文件导入Cheetah。

代码:

from Cheetah import ImportHooks
ImportHooks.install()

import sys
sys.path.insert(0, 'path/to/template_dir')  # or sys.path.append

PS。 ImportHooks会自动尝试从*.pyc*.py*.tmpl进行导入-无论先找到什么。几天前,我扩展了ImportHooks,以自动将*.tmpl编译为*.py*.pyc。我将编写更多文档并在几天后发布。期待几个月后最终版本的Cheetah 3.2。