0

ビューから渡される変数値に応じて、継承されたテンプレートにそれらの1つを表示するn個のdefブロック継承されたテンプレートにあります。

現在、ビューファイルで計算を行ってから、表示するdefを決定し、これをキー値として他の表示データとともに継承テンプレートに渡します。ここで、if-elif-endif節evaluateを使用します。このキーの値を使用して、表示するdefを確認し、そのdefを手動で呼び出します。**${self.val_of_key_nn()}**

このif-elif-endifbockを取り除き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 バージョンでこの機能をより明確にするために取り組んでいます。

現在それを行う方法はありますが、文書化されていません。使用する場合は、将来変更される可能性があることを考慮する必要があります。ビュー callable から dict だけを返す代わりに、タプルを ('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 に答える