动态设置Mako模板以包含另一个模板

时间:2013-10-10 18:46:36

标签: python pylons mako

我有一组特定于单个页面的大量消息,我可能会在晚上显示任意组合。为了简化添加新消息(大数量将在短期内变得更大),并且为了防止有一个巨大的if / elif块为每个消息添加一个条目,我想要一种方法来包含所有相关模板每次添加新消息时都必须更新模板。我的dict代表消息包含它的模板。这是我尝试这样做的:

<div class="item-content" id="results_content">
  <ul class="unstyled">
     %for msg in c.page_messages:
       <%include file="${msg.get('template_path')}" args="message=msg"/>
     %endfor
  </ul>
</div>

这会在%include标记处产生错误:

TypeError: 'NoneType' object has no attribute '__getitem__'
  1. 是否可以确认我是否可以使用模板变量和包含标记,如果我希望这样做,我似乎无法找到任何具体说明方式。
  2. 如果这不是可行的东西,还有另一种方法可以完成同样的事情吗? ie - 可以添加新消息,而无需修改拉入每个消息模板的模板代码。

1 个答案:

答案 0 :(得分:4)

看起来您可以按照描述的方式在include标记中使用变量。 From the docs

All tags have a set of attributes which are defined for each tag. Some of these attributes
are required. Also, many attributes support evaluation, meaning you can embed an     
expression (using ${}) inside the attribute text:

<%include file="/foo/bar/${myfile}.txt"/>

我的猜测是,此时c.page_messages不是可迭代的字典。