2012-03-03 3 views
2

私はmakoの初心者です。テンプレートの.pyスクリプトからプログラムで.pyスクリプトを作成したいと考えています。このようなことがありますMako for python

私のテンプレートスクリプトには、整数値をとる変数var1 = ${var1}があります。私はvar1の特定の値を持つ多くのコピーを作成できるようにしたい。 var1をリストとして宣言する呼び出し元を作成するには、どうすればvar1 = [1,2,3,4]とし、値を繰り返してテンプレートに渡します。誰がこれをやっていますか?render(**locals())のようなものが動作しますか?

また、私はMakoをダウンロードできません。そこにはWindows Python 2.7のダウンロードがありますか?

答えて

3

テンプレートオブジェクトを取得したら、あなたはちょうどあなたが必要な値を反復処理することができ、次のように新しい出力を得るためにrenderメソッドを使用します。

from mako.template import Template 

template = Template('var1 = ${var1}') 

for v in range(1, 5): 
    context = {'var1': v} 
    print template.render(**context) 

出力例:

var1 = 1 
var1 = 2 
var1 = 3 
var1 = 4 

locals()を使用するというアイデアに関しては、確かにうまくいくでしょう:

for var1 in range(1, 5): 
    print template.render(**locals()) 

とにかく、私は明示的にコンテキスト辞書を作成することを好みます。これは、暗黙的よりも明示的であることを条件としてzen of pythonと一貫しています。

最後に、インストールの問題に関して、私は利用可能なバイナリを知りませんが、mako download pageで説明されているようにpipを使用してインストールできます。

+0

おかげさまで、どんな文脈と**文脈で詳しく説明できますか –

+0

私は**現地語と言いますと渡されるものは、現在のローカルスコープのすべての変数なので、これをスクリプト、スクリプトに定義されているすべてのvarsは基本的には?どうもありがとう。 –

+0

'** context'を使うと、辞書のペアは、メソッドが' template.render(var1 = v) 'のように呼び出されたかのように展開されます。詳細については、この[関連する質問](http://stackoverflow.com/q/1769403/183066)をご覧ください。 – jcollado