条件mako基础模板继承一个

时间:2010-10-13 11:57:38

标签: python pylons mako

我有一个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 个答案:

答案 0 :(得分:3)

您不应该在模板中使用“c”。

<% includeJquery = True %>

% if includeJquery:
...
% endif

应该足够了。

我认为你做错了...在你的基本模板中你应该为jquery块做一个空白的def并调用它。然后在继承的模板中重新定义块。

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>

答案 1 :(得分:2)

好吧,因为这行

<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

因此我不需要在控制器中设置任何内容。