2016-07-21 3 views
0

с помощью bottlepy с simple template engine мне интересно, как я мог передать весь словарь, который был , прошел к шаблону на его подшаблонах.как передать собственный словарь подкатегорию

например. в моем main.py я есть:

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

и я хочу передать все значения в словаре от моего main.tpl к sub.tpl

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

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

перечисляя каждый ключ (как в приведенном выше примере) , конечно, не очень масштабируема и гибкая.

так: есть ли способ передать всю среду?

что-то вроде

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

Почему бы вам просто не передать: 'include ('subtemplate', index())'? –

+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 

И потом:

% include('subtemplate', env=env) 

EDIT

Благодаря @Kwartz для предполагая следующее улучшение.

уборщик метод был бы просто:

% include('subtemplate', **env) 

Не пробовал, но если **locals() работы (ч/т до @Lukas Graf за попытку его и подтверждения), то разумно ожидать **env к работа.

+0

Или, еще лучше, '% include ('subtemplate', ** env)' – Kwarrtz

+0

@Kwarrtz Это было бы неплохо. Не уверен в моей голове, работает ли расширение param в шаблоне Bottle. Ты это пробовал? –

+0

Я попробовал это с '% include ('subtemplate', ** locals())', который, казалось, работал. Но это будет проходить по всему объему 'main', что может иметь непреднамеренные побочные эффекты, поэтому мне нравится ваш aproach с построением собственного' env' лучше. –

Смежные вопросы