0

根据对象类使用不同模板的干净方法是什么?除了 bundlea if 语句

4

1 回答 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,那么您创建一个子类bazfoo没有明确记录type2templ其实例应使用的模板,您将得到baz的实例的默认模板。支持继承更复杂——除非你只是将 mako 模板实例设为类属性之一,当然,这使得它变得微不足道(只要theobj.thetempl你命名该属性thetempl!-),但我确实理解将视图与模型分开.

于 2010-04-22T02:52:47.770 回答