#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»/> , мне также помогло его полное удаление — спасибо!