Play支持强大的#{set /}标签,使您能够提供一段代码并将其分配给HTML页面中的占位符。例如,你可能会在一些代码示例中看到这一点(不记得哪一个)。
在的layout.html:
<head>
<link href="skin.css'}" rel="stylesheet" type="text/css" media="all" />
#{get 'moreStyles' /}
</head>
在any_page.html:
<div id='normal_dolayout_body'>
<p>This is the doLayout body</[p>
</div>
#{set 'moreStyles'}
<link href="extra.css" rel='stylesheet' type='text/css' media='all' />
#{/set}
结果页面将同时拥有CSS declaractions。在any_page.html
<!--div.container start -->
<div class="container">
<div class="center">
<div id="layout">
<div id='content'>
#{doLayout/}
</div>
<div id='sidebar'>
#{get 'sidebar'/}
</div>
</div>
</div>
<!--div.container end -->
<!--div.footer start -->
<div class="footer">
#{get 'promo' /}
#{get 'footerlinks' /}
</div>
<!--div.footer end -->
:在的layout.html
:现在来创建复杂的布局,同时使用#SET和标签的#include这样
<div id='normal_body'>Will be included by doLayout</div>
<!-- You may have any number of #set tags which will be matched with any #get declared in your main layout. -->
#{set 'promo'}
#{include 'my_custom_promo.html'/}
#{/set}
#{set 'sidebar'}
#{if user.isHappy }
#{include '/Commons/happy_user_sidebar.html' /}
#{/if}
#{else}
#{include '/Commons/default_sidebar.html' /}
#{/else}
#{/set}
宣传片和侧边栏块将被注入模板中关联的#get占位符处。
正如您所见,使用#set和include标签,您可以将DRY原理应用于页面组装,并采用类似于块的方式组装自定义页面内容。如果您想让设计师的工作更轻松,您甚至可以定义自己的自定义标签,将复杂的逻辑隐藏在一个漂亮的#{sidebar user:user /}标签中。
是否要为两个doLayout标记插入相同的内容? – seb 2011-06-04 06:38:48