Mako: передача переменных в базовый и дочерние шаблоны

#python #templates #mako

#python #шаблоны #mako

Вопрос:

Цель: получить доступ к myargs как в базовом, так и в дочерних шаблонах. В настоящее время я могу получить к ним доступ только в одном или другом.

Вызов:

 child.render(myargs={'a':2, b:'5'})
  

Выдержка из базового:

 <%page args="myargs=None, **kwargs"/>
% if myargs['a']:
    a is: ${myargs['a']}
% endif
${self.body(myargs=myargs)}
  

Дочерний фрагмент версии 1:

 <%page args="myargs=None, **kwargs"/>
<%inherit file="/base.html" />

% if myargs['b']:
    b is: ${myargs['b']}
% endif
  

Дочерний фрагмент версии 2:

 <%page args="myargs=None, **kwargs"/>
<%inherit file="/base.html" />
<%def name="body()">
% if myargs['b']:
    b is: ${myargs['b']}
% endif
</%def>
  

При использовании дочерней версии 1 дочерний выдает ошибку, потому что myargs не определен, а base работает.
При использовании дочерней версии 2 base выдает ошибку, поскольку myargs не определен, а дочерний работает.

Это не точные примеры, но в этом суть моей дилеммы. Если кто-нибудь может объяснить, как передавать переменные по цепочке наследования, это было бы прекрасно. К сожалению, документация для Mako, похоже, пропускает этот раздел.

Ответ №1:

Отличное простое решение, смехотворно.

Оказывается, «аргументы страницы» бесполезны для этой цели, фактически они создавали проблему, перезаписывая «myargs» на «None» на одной из страниц. К переменным ключевого слова можно получить доступ непосредственно из обоих файлов без использования «аргументов страницы».

Комментарии:

1. лол, ты прав, в старом mako нам приходилось использовать <%page args=»x»/> , мне также помогло его полное удаление — спасибо!