0

我有一个带有 if 语句的 base.mako 模板来包含或不包含 jQuery

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

有几个模板继承自 base.mako,有人需要 jQuery,有人不需要。

目前我必须在调用渲染之前在控制器中设置属性

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

但我认为这应该直接进入子模板(即jQueryTemplate.mako)

我尝试在继承之前添加它

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

但它不起作用。

有小费吗?

谢谢你的支持

4

2 回答 2

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>
于 2010-12-29T05:20:08.437 回答
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

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

于 2010-10-13T12:22:37.220 回答