我的继承模板中有 n个def块,它在继承的模板中显示其中一个,具体取决于从视图传递的变量值。< / p>
目前,我在View文件中进行计算,然后确定哪个def可见,然后将其作为键值与字典中的其他待显示数据一起传递给继承模板,在那里,使用 if-elif-endif
子句评估此键的值,以查看要显示的def,然后使用 **${self.val_of_key_nn()}**
我想知道是否有办法摆脱这个if-elif-endif bock并直接从视图中将 self.def_to_call()
命令传递给模板?
示例代码:
#defs is a key in the passed-dictionary.
#I want to reduce this block to a single-line code
% if defs == '1':
${self.block_1()}
% elif defs == '2':
${self.block_2()}
% else:
${self.block_default()}
% endif
谢谢。
答案 0 :(得分:3)
目前有一种方法可以做到这一点,但它没有记录,如果你使用它,你应该考虑将来可能发生变化。而不是只从你的视图中返回一个可调用的dict,返回一个元组:
('defname', {...})
其中'defname'
是您要呈现的特定def的(引用)名称,{...}
是通常的dict。
如果您对提议的未来方法感兴趣,那么将defname放在模板路径(资产规范)中:
https://github.com/Pylons/pyramid/commit/ea009a6d4a1ffa8585faa85581848f6e74a57dfc
对于其他感兴趣的读者,仅供参考:在zzzeek的博客here上有一篇关于此技术用例的优秀文章。
答案 1 :(得分:0)
例如:
<%
defdict = {'1': block_1, '2': block_2}
%>
${defdict.get(defs, block_default)()}