mako模板运行前,会被编译成py文件,因此一旦有模板中有问题,python抛出的出错信息(如文件名、行号、出错代码等)都是针对该py文件的,因此mako需要将这些Exceptions信息转换成模板对应的信息。
如python抛出的exception内容为:
File "/tmp/basic.html.py", line 49, in render_body
__M_writer(unicode(no1_value))
mako转换过之后的exception内容为:
File "/dir1/basic.html", line 12, in render_body
None value=${no1_value}
mako.exceptions是mako用于处理异常的主要代码,主要函数包括:
一、text_error_template
text_error_template用于输出文本格式的异常信息。例如:
from mako import exceptions
try:
mylookup = TemplateLookup(directories=['/dir1' ], input_encoding="utf-8", module_directory='/tmp')
mytemplate = mylookup.get_template("basic.html")
print mytemplate.render()
except:
print exceptions.text_error_template().render()
二、html_error_template
html_error_template用于输出HTML格式的异常信息。例如:
from mako import exceptions
try:
mylookup = TemplateLookup(directories=['/dir1' ], input_encoding="utf-8", module_directory='/tmp')
mytemplate = mylookup.get_template("basic.html")
print mytemplate.render()
except:
print exceptions.html_error_template().render()
html_error_template函数带 full、css两个参数,默认都是True。
full参数表示是否生成完整的HTML页面结构,即带等信息。
css参数表示是否生成自带的CSS信息。
通过指定这两个参数,可以将异常页面更好的融合到应用系统中。
Template类、TemplateLookup类都有一个format_exceptions,置为True,则mako默认将所有exception都转出html格式,即便是用text_error_template输出。
三、RichTraceback
mako生成上述出错信息的底层信息类就是RichTraceback,可以通过RichTraceback生成用户自定义的出错信息格式。from mako.exceptions import RichTraceback
try:
mylookup = TemplateLookup(directories=['/dir1' ], input_encoding="utf-8", module_directory='/tmp')
template = mylookup.get_template("basic.html")
print template.render()
except:
traceback = RichTraceback()
for (filename, lineno, function, line) in traceback.traceback:
print "File %s, line %s, in %s" % (filename, lineno, function)
print line, "\n"
print "%s: %s" % (str(traceback.error.__class__.__name__), traceback.error)
traceback.traceback为调用栈列表。
traceback.errorname为exception名称
traceback.lineno为模板行数
traceback.message为出错信息
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment