blob: 4ce79ff686dd0998bb3cfee64112a2e35be4f163 [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
Armin Ronachered98cac2008-05-07 08:42:11 +020050.. autoclass:: jinja2.environment.Environment([options])
Armin Ronacher762079c2008-05-08 23:57:56 +020051 :members: from_string, get_template, join_path, parse, lex, extend
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
Armin Ronachered98cac2008-05-07 08:42:11 +020086 .. automethod:: overlay([options])
87
Armin Ronacher3c8b7ad2008-04-28 13:52:21 +020088
89.. autoclass:: jinja2.Template
Armin Ronachered98cac2008-05-07 08:42:11 +020090 :members: make_module, module, new_context
Armin Ronacher3c8b7ad2008-04-28 13:52:21 +020091
Armin Ronacher7259c762008-04-30 13:03:59 +020092 .. attribute:: globals
93
Armin Ronachered98cac2008-05-07 08:42:11 +020094 The dict with the globals of that template. It's unsafe to modify
95 this dict as it may be shared with other templates or the environment
96 that loaded the template.
Armin Ronacher7259c762008-04-30 13:03:59 +020097
98 .. attribute:: name
99
Armin Ronachered98cac2008-05-07 08:42:11 +0200100 The loading name of the template. If the template was loaded from a
101 string this is `None`.
102
103 .. automethod:: render([context])
104
105 .. automethod:: generate([context])
106
107 .. automethod:: stream([context])
Armin Ronacher7259c762008-04-30 13:03:59 +0200108
Armin Ronacher3c8b7ad2008-04-28 13:52:21 +0200109
110.. autoclass:: jinja2.environment.TemplateStream
111 :members: disable_buffering, enable_buffering
112
113
114Undefined Types
115---------------
116
117These classes can be used as undefined types. The :class:`Environment`
118constructor takes an `undefined` parameter that can be one of those classes
119or a custom subclass of :class:`Undefined`. Whenever the template engine is
120unable to look up a name or access an attribute one of those objects is
121created and returned. Some operations on undefined values are then allowed,
122others fail.
123
124The closest to regular Python behavior is the `StrictUndefined` which
125disallows all operations beside testing if it's an undefined object.
126
127.. autoclass:: jinja2.runtime.Undefined
128
129.. autoclass:: jinja2.runtime.DebugUndefined
130
131.. autoclass:: jinja2.runtime.StrictUndefined
132
133
Armin Ronacher7259c762008-04-30 13:03:59 +0200134The Context
135-----------
136
Armin Ronacher19cf9c22008-05-01 12:49:53 +0200137.. autoclass:: jinja2.runtime.Context
Armin Ronacherf35e2812008-05-06 16:04:10 +0200138 :members: resolve, get_exported, get_all
Armin Ronacher7259c762008-04-30 13:03:59 +0200139
140 .. attribute:: parent
141
142 A dict of read only, global variables the template looks up. These
Armin Ronacher19cf9c22008-05-01 12:49:53 +0200143 can either come from another :class:`Context`, from the
Armin Ronacher7259c762008-04-30 13:03:59 +0200144 :attr:`Environment.globals` or :attr:`Template.globals`. It must not
145 be altered.
146
147 .. attribute:: vars
148
149 The template local variables. This list contains environment and
150 context functions from the :attr:`parent` scope as well as local
151 modifications and exported variables from the template. The template
152 will modify this dict during template evaluation but filters and
153 context functions are not allowed to modify it.
154
155 .. attribute:: environment
156
157 The environment that loaded the template.
158
159 .. attribute:: exported_vars
160
161 This set contains all the names the template exports. The values for
162 the names are in the :attr:`vars` dict. In order to get a copy of the
163 exported variables as dict, :meth:`get_exported` can be used.
164
165 .. attribute:: name
166
167 The load name of the template owning this context.
168
169 .. attribute:: blocks
170
171 A dict with the current mapping of blocks in the template. The keys
172 in this dict are the names of the blocks, and the values a list of
173 blocks registered. The last item in each list is the current active
174 block (latest in the inheritance chain).
175
176
Armin Ronacher5cdc1ac2008-05-07 12:17:18 +0200177.. _loaders:
178
Armin Ronacher3c8b7ad2008-04-28 13:52:21 +0200179Loaders
180-------
181
182Loaders are responsible for loading templates from a resource such as the
Armin Ronacher7259c762008-04-30 13:03:59 +0200183file system. The environment will keep the compiled modules in memory like
184Python's `sys.modules`. Unlike `sys.modules` however this cache is limited in
185size by default and templates are automatically reloaded.
Armin Ronachercda43df2008-05-03 17:10:05 +0200186All loaders are subclasses of :class:`BaseLoader`. If you want to create your
187
188own loader, subclass :class:`BaseLoader` and override `get_source`.
189
190.. autoclass:: jinja2.loaders.BaseLoader
191 :members: get_source, load
192
193Here a list of the builtin loaders Jinja2 provides:
Armin Ronacher3c8b7ad2008-04-28 13:52:21 +0200194
195.. autoclass:: jinja2.loaders.FileSystemLoader
196
197.. autoclass:: jinja2.loaders.PackageLoader
198
199.. autoclass:: jinja2.loaders.DictLoader
200
201.. autoclass:: jinja2.loaders.FunctionLoader
202
203.. autoclass:: jinja2.loaders.PrefixLoader
204
205.. autoclass:: jinja2.loaders.ChoiceLoader
206
Armin Ronacher3c8b7ad2008-04-28 13:52:21 +0200207
208Utilities
209---------
210
211These helper functions and classes are useful if you add custom filters or
212functions to a Jinja2 environment.
213
214.. autofunction:: jinja2.filters.environmentfilter
215
216.. autofunction:: jinja2.filters.contextfilter
217
218.. autofunction:: jinja2.utils.environmentfunction
219
220.. autofunction:: jinja2.utils.contextfunction
221
222.. function:: escape(s)
223
224 Convert the characters &, <, >, and " in string s to HTML-safe sequences.
225 Use this if you need to display text that might contain such characters
226 in HTML. This function will not escaped objects that do have an HTML
227 representation such as already escaped data.
228
Armin Ronacher187bde12008-05-01 18:19:16 +0200229.. autofunction:: jinja2.utils.clear_caches
230
Armin Ronacher3c8b7ad2008-04-28 13:52:21 +0200231.. autoclass:: jinja2.utils.Markup
232
233
234Exceptions
235----------
236
Armin Ronacher5cdc1ac2008-05-07 12:17:18 +0200237.. autoexception:: jinja2.exceptions.TemplateError
Armin Ronacher3c8b7ad2008-04-28 13:52:21 +0200238
Armin Ronacher5cdc1ac2008-05-07 12:17:18 +0200239.. autoexception:: jinja2.exceptions.UndefinedError
Armin Ronacher3c8b7ad2008-04-28 13:52:21 +0200240
Armin Ronacher5cdc1ac2008-05-07 12:17:18 +0200241.. autoexception:: jinja2.exceptions.TemplateNotFound
Armin Ronacher3c8b7ad2008-04-28 13:52:21 +0200242
Armin Ronacher5cdc1ac2008-05-07 12:17:18 +0200243.. autoexception:: jinja2.exceptions.TemplateSyntaxError
Armin Ronacher3c8b7ad2008-04-28 13:52:21 +0200244
Armin Ronacher5cdc1ac2008-05-07 12:17:18 +0200245.. autoexception:: jinja2.exceptions.TemplateAssertionError
Armin Ronacher7259c762008-04-30 13:03:59 +0200246
247
248.. _writing-filters:
249
250Custom Filters
251--------------
252
253Custom filters are just regular Python functions that take the left side of
254the filter as first argument and the the arguments passed to the filter as
255extra arguments or keyword arguments.
256
257For example in the filter ``{{ 42|myfilter(23) }}`` the function would be
258called with ``myfilter(42, 23)``. Here for example a simple filter that can
259be applied to datetime objects to format them::
260
261 def datetimeformat(value, format='%H:%M / %d-%m-%Y'):
262 return value.strftime(format)
263
264You can register it on the template environment by updating the
265:attr:`~Environment.filters` dict on the environment::
266
267 environment.filters['datetimeformat'] = datetimeformat
268
269Inside the template it can then be used as follows:
270
271.. sourcecode:: jinja
272
273 written on: {{ article.pub_date|datetimeformat }}
274 publication date: {{ article.pub_date|datetimeformat('%d-%m-%Y') }}
275
276Filters can also be passed the current template context or environment. This
277is useful if a filters wants to return an undefined value or check the current
278:attr:`~Environment.autoescape` setting. For this purpose two decorators
279exist: :func:`environmentfilter` and :func:`contextfilter`.
280
281Here a small example filter that breaks a text into HTML line breaks and
282paragraphs and marks the return value as safe HTML string if autoescaping is
283enabled::
284
285 import re
286 from jinja2 import environmentfilter, Markup, escape
287
288 _paragraph_re = re.compile(r'(?:\r\n|\r|\n){2,}')
289
290 @environmentfilter
291 def nl2br(environment, value):
292 result = u'\n\n'.join(u'<p>%s</p>' % p.replace('\n', '<br>\n')
293 for p in _paragraph_re.split(escape(value)))
294 if environment.autoescape:
295 result = Markup(result)
296 return result
297
298Context filters work the same just that the first argument is the current
Armin Ronacher19cf9c22008-05-01 12:49:53 +0200299active :class:`Context` rather then the environment.
Armin Ronacher7259c762008-04-30 13:03:59 +0200300
301
302.. _writing-tests:
303
304Custom Tests
305------------
306
307Tests work like filters just that there is no way for a filter to get access
308to the environment or context and that they can't be chained. The return
309value of a filter should be `True` or `False`. The purpose of a filter is to
310give the template designers the possibility to perform type and conformability
311checks.
312
313Here a simple filter that checks if a variable is a prime number::
314
315 import math
316
317 def is_prime(n):
318 if n == 2:
319 return True
320 for i in xrange(2, int(math.ceil(math.sqrt(n))) + 1):
321 if n % i == 0:
322 return False
323 return True
324
325
326You can register it on the template environment by updating the
327:attr:`~Environment.tests` dict on the environment::
328
329 environment.tests['prime'] = is_prime
330
331A template designer can then use the test like this:
332
333.. sourcecode:: jinja
334
335 {% if 42 is prime %}
336 42 is a prime number
337 {% else %}
338 42 is not a prime number
339 {% endif %}
340
341
342.. _global-namespace:
343
344The Global Namespace
345--------------------
346
347Variables stored in the :attr:`Environment.globals` or :attr:`Template.globals`
348dicts are special as they are available for imported templates too and will be
349used by the optimizer in future releases to evaluates parts of the template at
350compile time. This is the place where you can put variables and functions
351that should be available all the time.