blob: 04f5a5b9e02e0b3dd65cffa10aa47efa1978f81d [file] [log] [blame]
<!doctype html>
<!-- Generated by FreeMarker/Docgen from DocBook -->
<html lang="en" class="page-type-section">
<head prefix="og: http://ogp.me/ns#">
<meta charset="utf-8">
<title>import - Apache FreeMarker Manual</title>
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="format-detection" content="telephone=no">
<meta property="og:site_name" content="Apache FreeMarker Manual">
<meta property="og:title" content="import">
<meta property="og:locale" content="en_US">
<meta property="og:url" content="https://freemarker.apache.org/docs/ref_directive_import.html">
<link rel="canonical" href="https://freemarker.apache.org/docs/ref_directive_import.html">
<link rel="icon" href="favicon.png" type="image/png">
<link rel="stylesheet" type="text/css" href="https://fonts.googleapis.com/css?family=Roboto:500,700,400,300|Droid+Sans+Mono">
<link rel="stylesheet" type="text/css" href="docgen-resources/docgen.min.css?1707770044859">
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/cookie-bar/cookiebar-latest.min.js"></script>
</head>
<body itemscope itemtype="https://schema.org/Code">
<meta itemprop="url" content="https://freemarker.apache.org/docs/">
<meta itemprop="name" content="Apache FreeMarker Manual">
<!--[if lte IE 9]>
<div class="oldBrowserWarning" style="display: block">
Unsupported web browser - Use a modern browser to view this website!
</div>
<![endif]--> <div class="oldBrowserWarning">
Unsupported web browser - Use a modern browser to view this website!
</div>
<div class="header-top-bg"><div class="site-width header-top"><div id="hamburger-menu" role="button"></div> <div class="logo">
<a href="https://freemarker.apache.org" role="banner"><img itemprop="image" src="logo.png" alt="FreeMarker"></a> </div>
<ul class="tabs"><li><a href="https://freemarker.apache.org/">Home</a></li><li class="current"><a href="index.html">Manual</a></li><li><a class="external" href="api/index.html">Java API</a></li></ul><ul class="secondary-tabs"><li><a class="tab icon-heart" href="https://freemarker.apache.org/contribute.html" title="Contribute"><span>Contribute</span></a></li><li><a class="tab icon-bug" href="https://issues.apache.org/jira/projects/FREEMARKER" title="Report a Bug"><span>Report a Bug</span></a></li><li><a class="tab icon-download" href="https://freemarker.apache.org/freemarkerdownload.html" title="Download"><span>Download</span></a></li></ul></div></div><div class="header-bottom-bg"><div class="site-width search-row"><a href="index.html" class="navigation-header">Manual</a><div class="navigation-header"></div><form method="get" class="search-form" action="search-results.html"><fieldset><legend class="sr-only">Search form</legend><label for="search-field" class="sr-only">Search query</label><input id="search-field" name="q" type="search" class="search-input" placeholder="Search" spellcheck="false" autocorrect="off" autocomplete="off"><button type="submit" class="search-btn"><span class="sr-only">Search</span></button></fieldset></form></div><div class="site-width breadcrumb-row"> <div class="breadcrumbs">
<ul class="breadcrumb" itemscope itemtype="http://schema.org/BreadcrumbList"><li class="step-0" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="index.html"><span itemprop="name">Apache FreeMarker Manual</span></a></li><li class="step-1" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref.html"><span itemprop="name">Template Language Reference</span></a></li><li class="step-2" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref_directives.html"><span itemprop="name">Directive Reference</span></a></li><li class="step-3" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a class="label" itemprop="item" href="ref_directive_import.html"><span itemprop="name">import</span></a></li></ul> </div>
<div class="bookmarks" title="Bookmarks"><span class="sr-only">Bookmarks:</span><ul><li><a href="alphaidx.html">Alpha. index</a></li><li><a href="gloss.html">Glossary</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions</a></li><li><a href="ref_builtins_alphaidx.html">?builtins</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_specvar.html">.spec_vars</a></li><li><a href="app_faq.html">FAQ</a></li></ul></div></div></div> <div class="main-content site-width">
<div class="content-wrapper">
<div id="table-of-contents-wrapper" class="col-left">
<script>var breadcrumb = ["Apache FreeMarker Manual","Template Language Reference","Directive Reference","import"];</script>
<script src="toc.js?1707770044859"></script>
<script src="docgen-resources/main.min.js?1707770044859"></script>
</div>
<div class="col-right"><div class="page-content"><div class="page-title"><div class="pagers top"><a class="paging-arrow previous" href="ref_directive_if.html"><span>Previous</span></a><a class="paging-arrow next" href="ref_directive_include.html"><span>Next</span></a></div><div class="title-wrapper">
<h1 class="content-header header-section1" id="ref_directive_import" itemprop="headline">import</h1>
</div></div><div class="page-menu">
<div class="page-menu-title">Page Contents</div>
<ul><li><a class="page-menu-link" href="#autoid_98" data-menu-target="autoid_98">Synopsis</a></li><li><a class="page-menu-link" href="#autoid_99" data-menu-target="autoid_99">Description</a></li></ul> </div><a name="ref.directive.import"></a>
<h2 class="content-header header-section2" id="autoid_98">Synopsis</h2>
<pre class="metaTemplate"><code class="inline-code">&lt;#import <em class="code-color">path</em> as <em class="code-color">hash</em>&gt;</code>
</pre>
<p>Where:</p>
<ul>
<li>
<code class="inline-code"><em class="code-color">path</em></code>: The
path of a template. This is an expression that evaluates to a
string. (With other words, it doesn&#39;t have to be a fixed string,
it can also be something like, for example,
<code class="inline-code">profile.baseDir + &quot;/menu.ftl&quot;</code>.)
</li>
<li>
<code class="inline-code"><em class="code-color">hash</em></code>: The
unquoted name of hash variable by which you can access the
namespace. Not an expression. (If you have to import into a
dynamically constructed name, you have to use <a href="app_faq.html#faq_assign_to_dynamic_variable_name">this
trick</a>.)
</li>
</ul>
<h2 class="content-header header-section2" id="autoid_99">Description</h2>
<p>Used for making a collection of macros, functions, and other
variables available for the importing template, which were defined
in the imported template. For example, let&#39;s say you have written
macros to generate some commonly needed pieces output, and you have
put them into <code class="inline-code">/libs/commons.ftl</code>. Then, in the
template where you want to use them, do this (near the top of the
the template by convention, next to any other
<code class="inline-code">import</code>-s):</p>
<div class="code-block role-template">
<div class="code-block-label">Template</div><pre class="code-block-body">&lt;#import &quot;/libs/commons.ftl&quot; as com&gt;</pre> </div>
<p>Later in same template, let&#39;s say you want to use the
<code class="inline-code">copyright</code> macro defined in
<code class="inline-code">/libs/commons.ftl</code>. Then you can call that macro
like this:</p>
<div class="code-block role-template">
<div class="code-block-label">Template</div><pre class="code-block-body">&lt;@com.copyright date=&quot;1999-2002&quot;/&gt;</pre> </div>
<p>Note the <code class="inline-code">com.</code> before the macro name above.
All that was defined in <code class="inline-code">/libs/commons.ftl</code> will be
inside <code class="inline-code">com</code>.</p>
<p>Described more technically, <code class="inline-code">import</code> first
creates a new empty <a href="dgui_misc_namespace.html">namespace</a>, and then executes
the template given with
<code class="inline-code"><em class="code-color">path</em></code> parameter inside
that namespace, so the template populates the namespace with
variables (macros, functions, ...etc.). Then the namespace is
assigned to the variable specified with the
<code class="inline-code"><em class="code-color">hash</em></code> parameter, and
you can access its contents through that. A namespace is <a href="dgui_datamodel_types.html#dgui_datamodel_container">a hash</a>, hence <a href="dgui_template_exp.html#dgui_template_exp_var_hash">the dot operator</a> worked
above. The assignment is like the <code class="inline-code">assign</code>
directive, that is, it sets the variable in the current namespace.
Except, if the import happens in the namespace of the main (topmost)
template, the hash variable is also created in the global
namespace.</p>
<p>If you call <code class="inline-code">import</code> with the same
<code class="inline-code"><em class="code-color">path</em></code> for multiple
times, it will create the namespace and run the template for the
first call of <code class="inline-code">import</code> only. The later calls will
just give back the namespace that was created and initialized when
the template was imported for the first time, and will not execute
the imported template.</p>
<p>Any output printed by the imported template will be ignored
(will not be inserted at the place of <code class="inline-code">import</code>
directive invocation). An imported template is executed to populate
its namespace with variables, and not to write to the output.</p>
<p>The <code class="inline-code"><em class="code-color">path</em></code>
parameter can be a relative path like <code class="inline-code">&quot;foo.ftl&quot;</code>
and <code class="inline-code">&quot;../foo.ftl&quot;</code>, or an absolute like
<code class="inline-code">&quot;/foo.ftl&quot;</code>. Relative paths are relative to the
directory of the template that uses the <code class="inline-code">import</code>
directive. Absolute paths are relative to a base (often referred as
the &#39;&#39;root directory of the templates&#39;&#39;) that the programmer defines
when configuring FreeMarker.</p>
<p>Always use <code class="inline-code">/</code> (slash) to separate path
components, never <code class="inline-code">\</code> (backslash). If you are
loading templates from your local file system and it uses
backslashes (like under Windows), FreeMarker will do the necessary
conversions automatically.</p>
<p>Like with the <code class="inline-code">include</code> directive, <a href="ref_directive_include.html#ref_directive_include_acquisition">acquisition</a> and
<a href="ref_directive_include.html#ref_directive_include_localized">localized
lookup</a> may be used for resolving the path.</p>
<p><span class="marked-for-programmers">Note that it&#39;s possible to
automatically do the commonly used imports for all templates, with
the &quot;auto imports&quot; setting of <code class="inline-code">Configuration</code>.
Because templates may not use all the automatically imported
namespaces, it&#39;s also possible to make imports lazy (on demand),
with the "lazy auto imports" setting of
<code class="inline-code">Configuration</code>.</span></p>
<p>If you are new to namespaces, you should read: <a href="dgui_misc_namespace.html">Template Author&#39;s Guide/Miscellaneous/Namespaces</a></p>
<p>In case you are not sure if you should use the
<code class="inline-code">import</code>, or the somewhat similar
<code class="inline-code">include</code> directive, <a href="ref_directive_include.html#topic.import_vs_include">then see this</a>.</p>
<div class="bottom-pagers-wrapper"><div class="pagers bottom"><a class="paging-arrow previous" href="ref_directive_if.html"><span>Previous</span></a><a class="paging-arrow next" href="ref_directive_include.html"><span>Next</span></a></div></div></div></div> </div>
</div>
<div class="site-footer"><div class="site-width"><div class="footer-top"><div class="col-left sitemap"><div class="column"><h3 class="column-header">Overview</h3><ul><li><a href="https://freemarker.apache.org/">What is FreeMarker?</a></li><li><a href="https://freemarker.apache.org/freemarkerdownload.html">Download</a></li><li><a href="app_versions.html">Version history</a></li><li><a href="app_faq.html">FAQ</a></li><li><a itemprop="license" href="app_license.html">License</a></li><li><a href="https://privacy.apache.org/policies/privacy-policy-public.html">Privacy policy</a></li></ul></div><div class="column"><h3 class="column-header">Often used / Reference</h3><ul><li><a href="https://try.freemarker.apache.org/">Try template online</a></li><li><a href="dgui_template_exp.html#exp_cheatsheet">Expressions cheatsheet</a></li><li><a href="ref_directive_alphaidx.html">#directives</a></li><li><a href="ref_builtins_alphaidx.html">?built_ins</a></li><li><a href="ref_specvar.html">.special_vars</a></li><li><a href="api/freemarker/core/Configurable.html#setSetting-java.lang.String-java.lang.String-">Configuration settings</a></li></ul></div><div class="column"><h3 class="column-header">Community</h3><ul><li><a href="https://github.com/apache/freemarker">Github project page</a></li><li><a href="https://issues.apache.org/jira/projects/FREEMARKER">Report a bug</a></li><li><a href="https://freemarker.apache.org/report-security-vulnerabilities.html">Report security vulnerability</a></li><li><a href="https://stackoverflow.com/questions/ask?tags=freemarker">Get help on StackOverflow</a></li><li><a href="https://twitter.com/freemarker">Announcements on Twitter</a></li><li><a href="https://freemarker.apache.org/mailing-lists.html">Discuss on mailing lists</a></li></ul></div></div><div class="col-right"><ul class="social-icons"><li><a class="github" href="https://github.com/apache/freemarker">Github</a></li><li><a class="twitter" href="https://twitter.com/freemarker">Twitter</a></li><li><a class="stack-overflow" href="https://stackoverflow.com/questions/ask?tags=freemarker">Stack Overflow</a></li></ul><a class="xxe" href="http://www.xmlmind.com/xmleditor/" rel="nofollow" title="Edited with XMLMind XML Editor"><span>Edited with XMLMind XML Editor</span></a></div></div><div class="footer-bottom"> <p class="last-generated">
Last generated:
<time itemprop="dateModified" datetime="2024-02-12T20:34:04Z" title="Monday, February 12, 2024 at 8:34:04 PM Greenwich Mean Time">2024-02-12 20:34:04 GMT</time>, for Freemarker 2.3.32 </p>
<p class="copyright">
© <span itemprop="copyrightYear">1999</span>–2024
<a itemtype="http://schema.org/Organization" itemprop="copyrightHolder" href="https://apache.org/">The Apache Software Foundation</a>. Apache FreeMarker, FreeMarker, Apache Incubator, Apache, the Apache FreeMarker logo are trademarks of The Apache Software Foundation. All other marks mentioned may be trademarks or registered trademarks of their respective owners. </p>
</div></div></div></body>
</html>