3

私はそのような方法を持っています:

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

renderコンテキストとして渡された残りの変数を使用して、指定されたテンプレートファイルを自動的にレンダリングする関数はどこにありますか。titleこの場合、コンテキスト内の変数として渡します。これは私にとって少し冗長です。メソッドで定義されたすべての変数を自動的に取得しindex、コンテキストの一部としてMakoに渡す方法はありますか?

4

2 に答える 2

2

以下の手法を使用してください。

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()

上記のスクリプトを実行すると、次のように出力されます。

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

vars次のように呼び出しを行ったかのように、辞書をテンプレートコンテキストとして使用できることを示します。

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

を使用するlocals()と、関数の本体で定義されたローカル変数と、メソッドなどにindex()渡されるすべてのパラメーターが渡されます。index()self

于 2011-05-16T10:26:07.677 に答える
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自体を参照し、s個の変数を返しますvars()bar関数を使ってリアルタイムでできるとは思いませんが、クラスを使えばうまくいくようです。

于 2011-05-16T05:59:38.950 に答える