根据对象类使用不同模板的干净方法是什么?除了 bundlea if 语句
问问题
316 次
1 回答
2
您可以创建一个dict
,调用它type2templ
,类型(即类)作为键,mako.template.Template
实例作为值——然后
t = type2templ.get(type(theobj), default_templ)
... t.render() ...
这假设它theobj
是一个新样式类的实例(不是过时的、最好避免的“遗留”类,它们仍然是 Python 2 中的默认值——如果你使用它们,你绝对应该将你的代码升级到新样式类,但 usingtheobj.__class__
是一个可行的,如果 hackish,替代type(theobj)
这里)。 default_templ
是用于“以上都不是”的默认模板实例(如果您希望在theobj
是不可识别的类型时出现异常,请使用方括号索引而不是.get
调用)。
请注意,这不(直接)“支持继承” - 如果(例如)类foo
映射type2templ
到模板bar
,那么您创建一个子类baz
但foo
没有明确记录type2templ
其实例应使用的模板,您将得到baz
的实例的默认模板。支持继承更复杂——除非你只是将 mako 模板实例设为类属性之一,当然,这使得它变得微不足道(只要theobj.thetempl
你命名该属性thetempl
!-),但我确实理解将视图与模型分开.
于 2010-04-22T02:52:47.770 回答