2016-07-21 20 views
0

mit bottlepy mit dem simple template engine Ich frage mich, wie ich konnte das gesamte Wörterbuch übergeben, die auf der Schablone übergeben war es sub-Vorlagen.wie man eigenes Wörterbuch passieren zu Untervorlage

z.B. in meinem main.py ich habe:

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

und ich will auf alle die Werte im Wörterbuch von meinem main.tpl zu einem jeden Schlüssel Aufzählen sub.tpl

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

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

passieren (wie im obigen Beispiel) , ist natürlich nicht sehr skalierbar oder flexibel.

also: Gibt es eine Möglichkeit, die gesamte Umgebung weiterzugeben?

so etwas wie

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

Warum passierst du nicht einfach: 'include ('subtemplate', index())'? –

+0

@JossieCalderon unendliche Rekursion? –

+0

@LukasGraf Ich sehe nicht wie? Bitte? Erziehen? Mich? –

Antwort

2

nur so ein Gedanke, aus der Spitze von mir den Kopf. (Das heißt, nicht getestet.)

@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 

Und dann:

% include('subtemplate', env=env) 

EDIT

Dank @Kwartz für die Annahme, die folgenden Verbesserungen.

Eine sauberere Methode wäre, einfach:

% include('subtemplate', **env) 

habe es nicht ausprobiert, aber wenn **locals() Werke (h/t zu @Lukas Graf es für den Versuch und bestätigt werden soll), dann vernünftig es ist zu erwarten **env zu arbeite auch.

+0

Oder, noch besser, '% include ('subtemplate', ** env)' – Kwarrtz

+0

@Kwarrtz Das wäre in der Tat nett. Ich bin mir nicht sicher, ob die Param-Erweiterung in einer Bottle-Vorlage funktioniert. Hast du es versucht? –

+0

Ich versuchte es mit '% include ('subtemplate', ** localhosts())(), die zu funktionieren schienen. Aber das wird den gesamten Umfang von 'main' durchziehen, was unbeabsichtigte Nebenwirkungen haben kann, also mag ich Ihren Ansatz, Ihr eigenes' env' besser zu konstruieren. –