Состояние мако базового шаблона от наследственного - PullRequest
0 голосов
/ 13 октября 2010

У меня есть шаблон base.mako с оператором if, чтобы включить или не включать jQuery

<head>
% if getattr(c, 'includeJQuery', False):
    <script type="text/javascript" src="jquery.js"></script>
% endif
...

Несколько шаблонов наследуются от base.mako, кому-то нужен jQuery, кому-то нет.

На данный момент я должен установить атрибут в контроллере перед вызовом render

c.includeJQuery = True
return render('/jQueryTemplate.mako')

, но я думаю, что должен идти непосредственно в дочернем шаблоне (т.е. jQueryTemplate.mako)

Я пытался добавить его до наследования

<% c.includeJQuery = True %>
<%inherit file="/base.mako"/>\ 

, но он не работает.

Есть какие-нибудь советы?

Спасибо за вашу поддержку

Ответы [ 2 ]

3 голосов
/ 29 декабря 2010

Вы не должны использовать «c» в своем шаблоне.

<% includeJquery = True %>

и

% if includeJquery:
...
% endif

должно хватить.

Я думаю, что вы делаете это неправильно ... В базовом шаблоне вы должны сделать пустое определение для блока jquery и вызвать его. Затем в унаследованном шаблоне просто переопределите блок.

base.mako:

<head>
${self.jquery()}
</head>

<%def name="jquery()"></%def>

Затем в другом шаблоне вы добавляете jquery с помощью:

<%inherit file="base.mako />

<%def name="jquery()">
<script type="text/javascript" src="/js/jquery-1.4.2.min.js"></script>
</%def>
2 голосов
/ 13 октября 2010

Ну, так как со строкой

<script type="text/javascript" src="jquery.js"></script>

мне также нужно добавить некоторые другие js, я помещаю jQueryScript% def в дочерний шаблон

##jQueryTemplate.mako
<%def name="jQueryScript()">
    <script>
    </script>
</%def>

, затем в базу я проверяю,существует и добавьте все соответственно

#base.mako
%if hasattr(next, 'jQueryScript'):
    <script type="text/javascript" src="/js/jquery-1.4.2.min.js"></script>
    ${next.jQueryScript()}
%endif

, поэтому мне не нужно ничего устанавливать в контроллере.

...