2016-07-21 8 views
0

を使ってbottlepysimple template engineに翻訳しましたを辞書全体に渡すことができたのでしょうか。をサブテンプレートのテンプレートに渡しました。サブテンプレートに自分の辞書を渡す方法

@bottle.route('/') 
@bottle.view('main') 
def index(): 
    """main page""" 
    return {"name": "main", "foo": 12, "flag": True} 

と私は(上記の例のように)各キーを列挙sub.tpl

$ cat sub.tpl 
<h1>Hello, {{name}}</h1> 

$ cat main.tpl 
% include('subtemplate', name=name, foo=foo, flag=flag) 

に私のmain.tplからに、辞書内のすべてのの値を渡したい:私のmain.pyに私が持っていますもちろん、スケーラビリティや柔軟性はあまり高くありません。

so:環境全体を渡す方法はありますか?

$ cat main.tpl 
% include('subtemplate', *env) 
+0

'include( 'サブテンプレート'、インデックス())'? –

+0

@ JossieCalderon無限再帰? –

+0

@LukasGrafどのように表示されませんか?お願いします?教育?私? –

答えて

2

のようなもの、私の頭の上からだけで思考を、。 (すなわち、テストされていない。)

@bottle.route('/') 
@bottle.view('main') 
def index(): 
    """main page""" 
    env = {"name": "main", "foo": 12, "flag": True} # same vars as before 
    env["env"] = env # add a reference to the entire dict, for passing deeper into subtemplates 
    return env 

そして、次の改善を示唆ため@Kwartzへ

% include('subtemplate', env=env) 

EDIT

感謝。

クリーナー方法は、単純に、次のようになります。

% include('subtemplate', **env) 

はそれを試していないが、**locals()作品(それをしようと確認するための@LukasグラーフにH/T)場合、それはに**envを予想するのが妥当ですうまくいく。

+0

または、もっと良いですが、 '%include( 'サブテンプレート'、** env)' – Kwarrtz

+0

@Kwarrtzそれは本当にうれしいでしょう。ボトルのテンプレートでparamの拡張が機能するかどうかわからないあなたはそれを試しましたか? –

+0

私は '%include( 'サブテンプレート'、** locals())'を試してみましたが、これはうまくいきました。しかし、それは意図しない副作用があるかもしれない 'main'の全範囲に渡りますので、私は自分の' env'をより良く構築することが好きです。 –

関連する問題