2011-05-16 3 views
2

私はそうのような方法があります:renderが自動的にそれは文脈だとして渡された変数の残りの部分と与えられたテンプレートファイルをレンダリングする機能です現在のスコープ内のすべての変数をMakoにコンテキストとして渡す方法はありますか?

def index(self): 
    title = "test" 
    return render("index.html", title=title) 

を。この場合、私は文脈で変数としてtitleを渡しています。これは私のために少し冗長です。 indexメソッドで定義されているすべての変数を自動的に取得し、それらをコンテキストの一部としてMakoに渡す方法はありますか?このスニペットで

答えて

2

の下に与えられた技術を使用し:あなたが上記のスクリプトを実行すると、それはvars辞書は正確にあなたかのように、テンプレートのコンテキストとして使用することができることを示す

{'subject': 'A subject', 'title': 'A title'} 

を印刷し

def render(template, **vars): 
    # In practice this would render a template 
    print(vars) 

def index(): 
    title = 'A title' 
    subject = 'A subject' 
    render("index.html", **locals()) 

if __name__ == '__main__': 
    index() 

render("index.html", title='A title', subject='A subject') 

を使用している場合の場合、index()関数の本体で定義されたローカル変数と、index()に渡されるパラメータ(例えば、メソッドの場合はself)を渡します。

0

ルック:

def foo(): 
    class bar: 
    a = 'b' 
    c = 'd' 
    e = 'f' 
    foo = ['bar', 'baz'] 

    return vars(locals()['bar']) 

for var, val in foo().items(): 
    print var + '=' + str(val) 

あなたがそれを実行すると、それはこれを吐く:

a=b 
__module__=__main__ 
e=f 
c=d 
foo=['bar', 'baz'] 
__doc__=None 

locals()['bar']チャンクは、クラスbar自体を参照し、vars()barの変数を返します。私はあなたがリアルタイムで関数でそれを行うことはできないと思っていますが、クラスではうまくいくようです。

関連する問題