我有一个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"/>\
但它不起作用。
任何提示?
感谢您的支持
答案 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
因此我不需要在控制器中设置任何内容。