如何在 Cheetah 模板中使用继承?
How do I use inheritance in Cheetah templates?
对于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
显然,那是行不通的,因为执行这段代码时没有classA
但是进展如何?还是只能使用预编译的 Cheetah 模板进行继承?
有两种方法可以从一个模板导入另一个模板。
- 使用
cheetah compile
命令行程序将所有模板编译为*.py
文件。然后导入在 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 需要使用制表符缩进,而不是空格。)
- 颠覆 Python 导入以使 Cheetah 直接从
*.tmpl
个文件导入。
代码:
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 的最终版本。
对于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
显然,那是行不通的,因为执行这段代码时没有classA
但是进展如何?还是只能使用预编译的 Cheetah 模板进行继承?
有两种方法可以从一个模板导入另一个模板。
- 使用
cheetah compile
命令行程序将所有模板编译为*.py
文件。然后导入在 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 需要使用制表符缩进,而不是空格。)
- 颠覆 Python 导入以使 Cheetah 直接从
*.tmpl
个文件导入。
代码:
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 的最终版本。