0

我的继承模板中有n 个 def 块,根据从视图传递的变量值,在继承模板中显示其中一个块。

目前,我在 View 文件中进行计算,然后决定哪个 def 可见,然后将其作为键值与其他要显示的数据一起在字典中传递给继承模板并在那里,使用if-elif-endif子句评估此键的值以查看要显示的 def,然后手动调用该 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

谢谢你。

4

2 回答 2

3

菲尔,你的问题是最及时的......截至 2012 年 6 月,他们正在努力使这种能力在未来的 Pyramid 版本中更加明确。

目前有一种方法可以做到这一点,但它没有记录,如果你使用它,你应该认为它可能在未来发生变化。与其只从您的视图可调用返回一个字典,而是返回一个元组: 您希望呈现的特定 def 的(带引号的)名称在哪里,并且('defname', {...}) 是像往常一样的字典。'defname'{...}

如果您对此建议的未来方法感兴趣,它将 defname 放在模板路径(资产规范)中:

https://github.com/Pylons/pyramid/commit/ea009a6d4a1ffa8585faa85581848f6e74a57dfc

仅供其他感兴趣的读者参考:在 zzzeek 的博客这里有一篇关于这种技术用例的优秀文章。

于 2012-06-24T22:45:41.900 回答
0

例如:

<%
    defdict = {'1': block_1, '2': block_2}
%>

${defdict.get(defs, block_default)()}
于 2012-06-24T16:31:01.093 回答