blob: fa601ddfe2b5b224e64b7745ec683de099e2920c [file] [log] [blame]
Armin Ronacher3c8b7ad2008-04-28 13:52:21 +02001API
2===
3
4.. module:: jinja2
5 :synopsis: public Jinja2 API
6
7This document describes the API to Jinja2 and not the template language. It
8will be most useful as reference to those implementing the template interface
9to the application and not those who are creating Jinja2 templates.
10
11Basics
12------
13
14Jinja2 uses a central object called the template :class:`Environment`.
15Instances of this class are used to store the configuration, global objects
16and are used to load templates from the file system or other locations.
17Even if you are creating templates from string by using the constructor of
18:class:`Template` class, an environment is created automatically for you.
19
20Most applications will create one :class:`Environment` object on application
21initialization and use that to load templates. In some cases it's however
22useful to have multiple environments side by side, if different configurations
23are in use.
24
25The simplest way to configure Jinja2 to load templates for your application
26looks roughly like this::
27
28 from jinja2 import Environment, PackageLoader
29 env = Environment(loader=PackageLoader('yourapplication', 'templates'))
30
31This will create a template environment with the default settings and a
32loader that looks up the templates in the `templates` folder inside the
33`yourapplication` python package. Different loaders are available
34and you can also write your own if you want to load templates from a
35database or other resources.
36
37To load a template from this environment you just have to call the
38:meth:`get_template` method which then returns the loaded :class:`Template`::
39
40 template = env.get_template('mytemplate.html')
41
42To render it with some variables, just call the :meth:`render` method::
43
44 print template.render(the='variables', go='here')
45
46
47High Level API
48--------------
49
50.. autoclass:: jinja2.environment.Environment
Armin Ronacher7259c762008-04-30 13:03:59 +020051 :members: from_string, get_template, join_path, overlay
Armin Ronacher3c8b7ad2008-04-28 13:52:21 +020052
53 .. attribute:: shared
54
55 If a template was created by using the :class:`Template` constructor
56 an environment is created automatically. These environments are
57 created as shared environments which means that multiple templates
58 may have the same anonymous environment. For all shared environments
59 this attribute is `True`, else `False`.
60
61 .. attribute:: sandboxed
62
63 If the environment is sandboxed this attribute is `True`. For the
64 sandbox mode have a look at the documentation for the
65 :class:`~jinja2.sandbox.SandboxedEnvironment`.
66
67 .. attribute:: filters
68
69 A dict of filters for this environment. As long as no template was
Armin Ronacher7259c762008-04-30 13:03:59 +020070 loaded it's safe to add new filters or remove old. For custom filters
71 see :ref:`writing-filters`.
Armin Ronacher3c8b7ad2008-04-28 13:52:21 +020072
73 .. attribute:: tests
74
Lukas Meuserad48a2e2008-05-01 18:19:57 +020075 A dict of test functions for this environment. As long as no
76 template was loaded it's safe to modify this dict. For custom tests
Armin Ronacher7259c762008-04-30 13:03:59 +020077 see :ref:`writing-tests`.
Armin Ronacher3c8b7ad2008-04-28 13:52:21 +020078
79 .. attribute:: globals
80
81 A dict of global variables. These variables are always available
82 in a template and (if the optimizer is enabled) may not be
Lukas Meuserad48a2e2008-05-01 18:19:57 +020083 overridden by templates. As long as no template was loaded it's safe
Armin Ronacher7259c762008-04-30 13:03:59 +020084 to modify this dict. For more details see :ref:`global-namespace`.
Armin Ronacher3c8b7ad2008-04-28 13:52:21 +020085
86
87.. autoclass:: jinja2.Template
Armin Ronacher7ceced52008-05-03 10:15:31 +020088 :members: render, stream, generate, make_module, module
Armin Ronacher3c8b7ad2008-04-28 13:52:21 +020089
Armin Ronacher7259c762008-04-30 13:03:59 +020090 .. attribute:: globals
91
92 foo
93
94 .. attribute:: name
95
96 foo
97
Armin Ronacher3c8b7ad2008-04-28 13:52:21 +020098
99.. autoclass:: jinja2.environment.TemplateStream
100 :members: disable_buffering, enable_buffering
101
102
103Undefined Types
104---------------
105
106These classes can be used as undefined types. The :class:`Environment`
107constructor takes an `undefined` parameter that can be one of those classes
108or a custom subclass of :class:`Undefined`. Whenever the template engine is
109unable to look up a name or access an attribute one of those objects is
110created and returned. Some operations on undefined values are then allowed,
111others fail.
112
113The closest to regular Python behavior is the `StrictUndefined` which
114disallows all operations beside testing if it's an undefined object.
115
116.. autoclass:: jinja2.runtime.Undefined
117
118.. autoclass:: jinja2.runtime.DebugUndefined
119
120.. autoclass:: jinja2.runtime.StrictUndefined
121
122
Armin Ronacher7259c762008-04-30 13:03:59 +0200123The Context
124-----------
125
Armin Ronacher19cf9c22008-05-01 12:49:53 +0200126.. autoclass:: jinja2.runtime.Context
Armin Ronacher7259c762008-04-30 13:03:59 +0200127 :members: super, get, get_exported, get_all
128
129 .. attribute:: parent
130
131 A dict of read only, global variables the template looks up. These
Armin Ronacher19cf9c22008-05-01 12:49:53 +0200132 can either come from another :class:`Context`, from the
Armin Ronacher7259c762008-04-30 13:03:59 +0200133 :attr:`Environment.globals` or :attr:`Template.globals`. It must not
134 be altered.
135
136 .. attribute:: vars
137
138 The template local variables. This list contains environment and
139 context functions from the :attr:`parent` scope as well as local
140 modifications and exported variables from the template. The template
141 will modify this dict during template evaluation but filters and
142 context functions are not allowed to modify it.
143
144 .. attribute:: environment
145
146 The environment that loaded the template.
147
148 .. attribute:: exported_vars
149
150 This set contains all the names the template exports. The values for
151 the names are in the :attr:`vars` dict. In order to get a copy of the
152 exported variables as dict, :meth:`get_exported` can be used.
153
154 .. attribute:: name
155
156 The load name of the template owning this context.
157
158 .. attribute:: blocks
159
160 A dict with the current mapping of blocks in the template. The keys
161 in this dict are the names of the blocks, and the values a list of
162 blocks registered. The last item in each list is the current active
163 block (latest in the inheritance chain).
164
165
Armin Ronacher3c8b7ad2008-04-28 13:52:21 +0200166Loaders
167-------
168
169Loaders are responsible for loading templates from a resource such as the
Armin Ronacher7259c762008-04-30 13:03:59 +0200170file system. The environment will keep the compiled modules in memory like
171Python's `sys.modules`. Unlike `sys.modules` however this cache is limited in
172size by default and templates are automatically reloaded.
Armin Ronachercda43df2008-05-03 17:10:05 +0200173All loaders are subclasses of :class:`BaseLoader`. If you want to create your
174
175own loader, subclass :class:`BaseLoader` and override `get_source`.
176
177.. autoclass:: jinja2.loaders.BaseLoader
178 :members: get_source, load
179
180Here a list of the builtin loaders Jinja2 provides:
Armin Ronacher3c8b7ad2008-04-28 13:52:21 +0200181
182.. autoclass:: jinja2.loaders.FileSystemLoader
183
184.. autoclass:: jinja2.loaders.PackageLoader
185
186.. autoclass:: jinja2.loaders.DictLoader
187
188.. autoclass:: jinja2.loaders.FunctionLoader
189
190.. autoclass:: jinja2.loaders.PrefixLoader
191
192.. autoclass:: jinja2.loaders.ChoiceLoader
193
Armin Ronacher3c8b7ad2008-04-28 13:52:21 +0200194
195Utilities
196---------
197
198These helper functions and classes are useful if you add custom filters or
199functions to a Jinja2 environment.
200
201.. autofunction:: jinja2.filters.environmentfilter
202
203.. autofunction:: jinja2.filters.contextfilter
204
205.. autofunction:: jinja2.utils.environmentfunction
206
207.. autofunction:: jinja2.utils.contextfunction
208
209.. function:: escape(s)
210
211 Convert the characters &, <, >, and " in string s to HTML-safe sequences.
212 Use this if you need to display text that might contain such characters
213 in HTML. This function will not escaped objects that do have an HTML
214 representation such as already escaped data.
215
Armin Ronacher187bde12008-05-01 18:19:16 +0200216.. autofunction:: jinja2.utils.clear_caches
217
Armin Ronacher3c8b7ad2008-04-28 13:52:21 +0200218.. autoclass:: jinja2.utils.Markup
219
220
221Exceptions
222----------
223
224.. autoclass:: jinja2.exceptions.TemplateError
225
226.. autoclass:: jinja2.exceptions.UndefinedError
227
228.. autoclass:: jinja2.exceptions.TemplateNotFound
229
230.. autoclass:: jinja2.exceptions.TemplateSyntaxError
231
232.. autoclass:: jinja2.exceptions.TemplateAssertionError
Armin Ronacher7259c762008-04-30 13:03:59 +0200233
234
235.. _writing-filters:
236
237Custom Filters
238--------------
239
240Custom filters are just regular Python functions that take the left side of
241the filter as first argument and the the arguments passed to the filter as
242extra arguments or keyword arguments.
243
244For example in the filter ``{{ 42|myfilter(23) }}`` the function would be
245called with ``myfilter(42, 23)``. Here for example a simple filter that can
246be applied to datetime objects to format them::
247
248 def datetimeformat(value, format='%H:%M / %d-%m-%Y'):
249 return value.strftime(format)
250
251You can register it on the template environment by updating the
252:attr:`~Environment.filters` dict on the environment::
253
254 environment.filters['datetimeformat'] = datetimeformat
255
256Inside the template it can then be used as follows:
257
258.. sourcecode:: jinja
259
260 written on: {{ article.pub_date|datetimeformat }}
261 publication date: {{ article.pub_date|datetimeformat('%d-%m-%Y') }}
262
263Filters can also be passed the current template context or environment. This
264is useful if a filters wants to return an undefined value or check the current
265:attr:`~Environment.autoescape` setting. For this purpose two decorators
266exist: :func:`environmentfilter` and :func:`contextfilter`.
267
268Here a small example filter that breaks a text into HTML line breaks and
269paragraphs and marks the return value as safe HTML string if autoescaping is
270enabled::
271
272 import re
273 from jinja2 import environmentfilter, Markup, escape
274
275 _paragraph_re = re.compile(r'(?:\r\n|\r|\n){2,}')
276
277 @environmentfilter
278 def nl2br(environment, value):
279 result = u'\n\n'.join(u'<p>%s</p>' % p.replace('\n', '<br>\n')
280 for p in _paragraph_re.split(escape(value)))
281 if environment.autoescape:
282 result = Markup(result)
283 return result
284
285Context filters work the same just that the first argument is the current
Armin Ronacher19cf9c22008-05-01 12:49:53 +0200286active :class:`Context` rather then the environment.
Armin Ronacher7259c762008-04-30 13:03:59 +0200287
288
289.. _writing-tests:
290
291Custom Tests
292------------
293
294Tests work like filters just that there is no way for a filter to get access
295to the environment or context and that they can't be chained. The return
296value of a filter should be `True` or `False`. The purpose of a filter is to
297give the template designers the possibility to perform type and conformability
298checks.
299
300Here a simple filter that checks if a variable is a prime number::
301
302 import math
303
304 def is_prime(n):
305 if n == 2:
306 return True
307 for i in xrange(2, int(math.ceil(math.sqrt(n))) + 1):
308 if n % i == 0:
309 return False
310 return True
311
312
313You can register it on the template environment by updating the
314:attr:`~Environment.tests` dict on the environment::
315
316 environment.tests['prime'] = is_prime
317
318A template designer can then use the test like this:
319
320.. sourcecode:: jinja
321
322 {% if 42 is prime %}
323 42 is a prime number
324 {% else %}
325 42 is not a prime number
326 {% endif %}
327
328
329.. _global-namespace:
330
331The Global Namespace
332--------------------
333
334Variables stored in the :attr:`Environment.globals` or :attr:`Template.globals`
335dicts are special as they are available for imported templates too and will be
336used by the optimizer in future releases to evaluates parts of the template at
337compile time. This is the place where you can put variables and functions
338that should be available all the time.