doLayout和’Java Play!’中的模板包含有什么区别?

使用doLayout 扩展时 ,您只能拥有一个子模板,但可以include多个子模板。

有什么区别,最佳做法是什么?

它们彼此相反。

doLayout用作extends标记的一部分。 extends标记指定要扩展的模板, doLayout标记指定扩展模板中注入代码的位置。

include标记只是指定应在指定的点注入另一个模板。

因此,doLayout以类似的方式工作,除了doLayout标记没有指定注入哪个模板。 这是通过extends标签完成的,这意味着模板(通常包含页眉,页脚和常见的css和javascript)可以扩展,而不需要知道任何有关扩展它的模板的信息。

Include ,只是一个愚蠢的代码注入。

如果你想用include实现doLayoutfunction(这是你用PHP或类似方法做的那种方式),你可以做

 #{include 'header.html'} your template code #{include 'footer.html'} 

这必须在模板中的每个页面上复制。 而使用extendsdoLayout允许您这样做

 #{extends 'template.html'} 

您的代码注入template.html的位置由doLayout标记管理。

扩展方法只是一种更简洁的方法。 此外,如果您决定更改页面布局,则只需更新一个文件,并在内容位于扩展模板中的位置提供更大的灵活性。

从google-group我注意到extends (doLayout), include and a tag之间的区别:

extend和include是相似的,区别主要在于你传递变量的方式

使用extend,父模板提供样板,子模板提供“body”。 例如,父模板可以呈现页眉和页脚,子模板可以呈现页面的主要内容。 您通常在子模板中设置在父模板中读取和应用的变量,例如#{set title:'Pet shop' /}#{set showLoginBox:true /}

当您想在单个父模板中多次执行相同的操作时,可以使用include。 例如#{include 'formStatusFields.html' /}父模板中的变量可用于包含的模板。

如果您有一个从多个不同父模板执行的模板代码,则应使用标记。 您可以将变量传递给标记。 例如#{button label:'Ok', id:'ok-button'}