У меня есть небольшая иерархия шаблонов мако, которые выглядят примерно так:
base.mako
<h1>${self.view()}</h1>
${listactions(self.mainactions)}
${self.body()}
<%def name="listactions(actions)">
<ul>
% for action in actions:
<li>${action}</li>
% endfor
</ul>
</%def>
clientsbase.mako
<%inherit file="base.mako"/>
<%def name="view()">Clients</%def>
<%
mainactions = [request.route_url('clientsnew')]
%>
clientsindex.mako
<%inherit file="clientsbase.mako"/>
This is the index
Проблема в том, что когда я пытаюсь получить доступ к индексу представления клиентов, который отображает clientsindex.mako, я получаю сообщение об ошибке AttributeError: Пространство имен 'self: /base.mako' не имеет члена 'mainactions' .
Каким должен быть правильный способ сделать это? Я просмотрел документацию по mako, и то, что я нашел до сих пор, - это то, что я могу использовать python-блок на уровне модуля для объявления связей, а затем в base.mako просто сделать self.attr.mainactions . Проблема в том, что внутри этого блока у меня нет доступа к объекту запроса.
Я предполагаю, что еще один вопрос: в моем случае я использую функции в качестве вызываемых для представления, но, допустим, я написал отдельный файл представления client.py, который содержит все представления, связанные с клиентами. Есть ли способ как-то установить переменные контекста контроллера в файле client.py? Таким образом, я мог бы уже установить переменную mainactions в контексте шаблона, не возвращая ее в каждом представлении.