include

Synopsis

<#include filename>
or
<#include filename options>

Where:

  • filename: Expression evaluates to string
  • options: One or more of these: encoding=encoding, parse=parse
    • encoding: Expression evaluates to string
    • parse: Expression evaluates to boolean (also accepts a few string values for backward compatibility)

Description

You can use it to insert the contents of another file (specified by the filename parameter) into your template. The output from the included file is inserted at the point where the include tag occurs. The include directive is not replaced by the content of the included file, nor does it really insert anything into the template itself. It just processes the included file. The inclusion happens each times when FreeMarker reaches the include directive in the course of template processing. So, for example if the include is inside a list, you can specify different filenames in each cycle.

The filename is the path of the file to include, relative to the including template. However, if you start the path with /, then the path is an absolute path. Absolute path means here that it is relative to a base (often referred as the ``root directory of the templates'') that the programmer defines when he configures FreeMarker.

Note

This is different than the way it worked prior FreeMarker 2.1, where the path was always absolute. To preserve the old behavior, enable the classic compatible mode in the Configuration object.

Also, always use slashes to separate path components. If you are loading templates from your local file system and it uses backslashes (i.e. Windows), FreeMarker will convert them automatically.

Example:

Assume /common/copyright.ftl contains:

Copyright 2001-2002 ${me}<br>
All rights reserved.  

Then this:

<#assign me = "Juila Smith">
<h1>Some test</h1>
<p>Yeah.
<hr>
<#include "/common/copyright.ftl">  

will output this:

<h1>Some test</h1>
<p>Yeah.
<hr>
Copyright 2001-2002 Juila Smith
All rights reserved.  

The supported options are:

  • parse: If it is true, then the included file will be parsed as FTL, otherwise the whole file will be considered as plain text. If you omit this option, then it defaults to true.

  • encoding: The included file inherits the encoding (in practice: the charset) of the including template, unless you specify an encoding with this option. Encoding names are the same as the ones supported be java.io.InputStreamReader (as of Java API 1.3: MIME-preferred charset names from the IANA Charset Registry). Examples of valid names: ISO-8859-2, UTF-8, Shift_JIS, Big5, EUC-KR, GB2312.

Example:

<#include "/common/navbar.html" parse=false encoding="Shift_JIS">  

Note, that it is possible to automatically do the commonly used inclusions for all templates, with the "auto includes" setting of Configuration.

Using acquisition

There's a special path component represented by an asterisk (*). It is interpreted as "this directory or any of its parents". Therefore, if the template located in /foo/bar/template.ftl has the following line:

<#include "*/footer.ftl">  

then the engine will look for the template in following locations, in this order:

  • /foo/bar/footer.ftl
  • /foo/footer.ftl
  • /footer.ftl

This mechanism is called acquisition and allows the designers to place commonly included files in a parent directory, and redefine them on a per-subdirectory basis as needed. We say that the including template acquires the template to include from the first parent directory that has it. Note that you can specify not only a template name to the right of the asterisk, but a subpath as well. I.e. if the previous template instead read:

<#include "*/commons/footer.ftl">  

then the engine would look for the template in following locations, in this order:

  • /foo/bar/commons/footer.ftl
  • /foo/commons/footer.ftl
  • /commons/footer.ftl

Finally, the asterisk needn't be the first element of the path:

<#include "commons/*/footer.ftl">  

would cause the engine to look for the template in following locations, in this order:

  • /foo/bar/commons/footer.ftl
  • /foo/bar/footer.ftl
  • /foo/footer.ftl
  • /footer.ftl

However, there can be at most one asterisk in the path. Specifying more than one asterisk will result in a template not being found.

Localized lookup

Whenever a template is loaded, it is assigned a locale. A locale is a language and an optional country or dialect identifier. A template is typically loaded by some code that the programmer wrote and he chooses a locale for the template based on some aspect. For example, when the FreemarkerServlet loads templates, it always requests the template with locale matching the language preference of the browser that requested the web page.

Whenever a template is loaded, it is assigned a locale. A locale is a language and an optional country or dialect identifier. A template is typically loaded by some code that the programmer wrote and he chooses a locale for the template based on some aspect. For example, when the FreeMarkerServlet loads templates, it always requests the template with locale matching the language preference of the browser that requested the web page.

When a template includes another template, it attempts to load a template with the same locale. Suppose your template was loaded with locale en_US, which means U.S. English. When you include another template:

<include "footer.ftl">  

the engine will in fact look for several templates, in this order:

  • footer_en_US.ftl,
  • footer_en.ftl, and finally
  • footer.ftl

Note that you can disable localized lookup feature with the setLocalizedLookup method of Configuration.

When you use both acquisition and localized template lookup, the template with more specific locale in a parent directory takes precedence over template with less specific locale in a child directory. Suppose you use the following include from /foo/bar/template.ftl:

<#include "*/footer.ftl">  

the engine will look for these templates, in this order:

  • /foo/bar/footer_en_US.ftl
  • /foo/footer_en_US.ftl
  • /footer_en_US.ftl
  • /foo/bar/footer_en.ftl
  • /foo/footer_en.ftl
  • /footer_en.ftl
  • /foo/bar/footer.ftl
  • /foo/footer.ftl
  • /footer.ftl

Page generated: 2007-12-05 00:36:54 GMT FreeMarker Manual -- For FreeMarker 2.3.11