blob: de4d2e442be323f67972cd7749536796dc8d5270 [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`.
Carl A Dunhamd5463582014-01-18 15:26:10 -060015Instances of this class are used to store the configuration and global objects,
Armin Ronacher3c8b7ad2008-04-28 13:52:21 +020016and are used to load templates from the file system or other locations.
Armin Ronacher0aa0f582009-03-18 01:01:36 +010017Even if you are creating templates from strings by using the constructor of
Armin Ronacher61a5a242008-05-26 12:07:44 +020018:class:`Template` class, an environment is created automatically for you,
19albeit a shared one.
Armin Ronacher3c8b7ad2008-04-28 13:52:21 +020020
21Most applications will create one :class:`Environment` object on application
Kojo Idrissad48cb212016-04-10 14:04:46 -050022initialization and use that to load templates. In some cases however, it's
Armin Ronacher3c8b7ad2008-04-28 13:52:21 +020023useful to have multiple environments side by side, if different configurations
24are in use.
25
26The simplest way to configure Jinja2 to load templates for your application
27looks roughly like this::
28
Armin Ronacherb81a8a32017-01-07 16:13:39 +010029 from jinja2 import Environment, PackageLoader, select_autoescape
30 env = Environment(
31 loader=PackageLoader('yourapplication', 'templates'),
32 autoescape=select_autoescape(['html', 'xml'])
33 )
Armin Ronacher3c8b7ad2008-04-28 13:52:21 +020034
35This will create a template environment with the default settings and a
36loader that looks up the templates in the `templates` folder inside the
37`yourapplication` python package. Different loaders are available
38and you can also write your own if you want to load templates from a
Armin Ronacherb81a8a32017-01-07 16:13:39 +010039database or other resources. This also enables autoescaping for HTML and
40XML files.
Armin Ronacher3c8b7ad2008-04-28 13:52:21 +020041
42To load a template from this environment you just have to call the
43:meth:`get_template` method which then returns the loaded :class:`Template`::
44
45 template = env.get_template('mytemplate.html')
46
47To render it with some variables, just call the :meth:`render` method::
48
49 print template.render(the='variables', go='here')
50
Éric Araujof6b654d2015-05-29 16:57:10 -040051Using a template loader rather than passing strings to :class:`Template`
Armin Ronacher61a5a242008-05-26 12:07:44 +020052or :meth:`Environment.from_string` has multiple advantages. Besides being
53a lot easier to use it also enables template inheritance.
54
Armin Ronacherb81a8a32017-01-07 16:13:39 +010055.. admonition:: Notes on Autoescaping
56
57 In future versions of Jinja2 we might enable autoescaping by default
58 for security reasons. As such you are encouraged to explicitly
59 configure autoescaping now instead of relying on the default.
60
Armin Ronacher3c8b7ad2008-04-28 13:52:21 +020061
Armin Ronacherf3c35c42008-05-23 23:18:14 +020062Unicode
63-------
64
Armin Ronacher656d5e72010-02-09 01:31:47 +010065Jinja2 is using Unicode internally which means that you have to pass Unicode
Armin Ronacherf3c35c42008-05-23 23:18:14 +020066objects to the render function or bytestrings that only consist of ASCII
67characters. Additionally newlines are normalized to one end of line
68sequence which is per default UNIX style (``\n``).
69
Armin Ronacher61a5a242008-05-26 12:07:44 +020070Python 2.x supports two ways of representing string objects. One is the
71`str` type and the other is the `unicode` type, both of which extend a type
72called `basestring`. Unfortunately the default is `str` which should not
73be used to store text based information unless only ASCII characters are
Armin Ronacher0aa0f582009-03-18 01:01:36 +010074used. With Python 2.6 it is possible to make `unicode` the default on a per
Armin Ronacher61a5a242008-05-26 12:07:44 +020075module level and with Python 3 it will be the default.
76
Armin Ronacher656d5e72010-02-09 01:31:47 +010077To explicitly use a Unicode string you have to prefix the string literal
Armin Ronacher61a5a242008-05-26 12:07:44 +020078with a `u`: ``u'Hänsel und Gretel sagen Hallo'``. That way Python will
Armin Ronacher656d5e72010-02-09 01:31:47 +010079store the string as Unicode by decoding the string with the character
Armin Ronacher61a5a242008-05-26 12:07:44 +020080encoding from the current Python module. If no encoding is specified this
81defaults to 'ASCII' which means that you can't use any non ASCII identifier.
82
83To set a better module encoding add the following comment to the first or
Armin Ronacher656d5e72010-02-09 01:31:47 +010084second line of the Python module using the Unicode literal::
Armin Ronacher61a5a242008-05-26 12:07:44 +020085
86 # -*- coding: utf-8 -*-
87
88We recommend utf-8 as Encoding for Python modules and templates as it's
89possible to represent every Unicode character in utf-8 and because it's
90backwards compatible to ASCII. For Jinja2 the default encoding of templates
91is assumed to be utf-8.
92
Armin Ronacher656d5e72010-02-09 01:31:47 +010093It is not possible to use Jinja2 to process non-Unicode data. The reason
Armin Ronacher61a5a242008-05-26 12:07:44 +020094for this is that Jinja2 uses Unicode already on the language level. For
95example Jinja2 treats the non-breaking space as valid whitespace inside
96expressions which requires knowledge of the encoding or operating on an
Armin Ronacher656d5e72010-02-09 01:31:47 +010097Unicode string.
Armin Ronacher61a5a242008-05-26 12:07:44 +020098
Armin Ronacher656d5e72010-02-09 01:31:47 +010099For more details about Unicode in Python have a look at the excellent
Armin Ronacher61a5a242008-05-26 12:07:44 +0200100`Unicode documentation`_.
101
Armin Ronacher58f351d2008-05-28 21:30:14 +0200102Another important thing is how Jinja2 is handling string literals in
Armin Ronacher656d5e72010-02-09 01:31:47 +0100103templates. A naive implementation would be using Unicode strings for
Armin Ronacher58f351d2008-05-28 21:30:14 +0200104all string literals but it turned out in the past that this is problematic
105as some libraries are typechecking against `str` explicitly. For example
Armin Ronacher656d5e72010-02-09 01:31:47 +0100106`datetime.strftime` does not accept Unicode arguments. To not break it
Armin Ronacher58f351d2008-05-28 21:30:14 +0200107completely Jinja2 is returning `str` for strings that fit into ASCII and
108for everything else `unicode`:
109
110>>> m = Template(u"{% set a, b = 'foo', 'föö' %}").module
111>>> m.a
112'foo'
113>>> m.b
114u'f\xf6\xf6'
115
Armin Ronacher61a5a242008-05-26 12:07:44 +0200116
117.. _Unicode documentation: http://docs.python.org/dev/howto/unicode.html
Armin Ronacherf3c35c42008-05-23 23:18:14 +0200118
Armin Ronacher3c8b7ad2008-04-28 13:52:21 +0200119High Level API
120--------------
121
Armin Ronacher9bb7e472008-05-28 11:26:59 +0200122The high-level API is the API you will use in the application to load and
123render Jinja2 templates. The :ref:`low-level-api` on the other side is only
124useful if you want to dig deeper into Jinja2 or :ref:`develop extensions
125<jinja-extensions>`.
126
Armin Ronacher5411ce72008-05-25 11:36:22 +0200127.. autoclass:: Environment([options])
Armin Ronacher31bbd9e2010-01-14 00:41:30 +0100128 :members: from_string, get_template, select_template,
Armin Ronacher46844982011-01-29 20:19:58 +0100129 get_or_select_template, join_path, extend, compile_expression,
Armin Ronacher94638502011-09-26 00:41:25 +0200130 compile_templates, list_templates, add_extension
Armin Ronacher3c8b7ad2008-04-28 13:52:21 +0200131
132 .. attribute:: shared
133
134 If a template was created by using the :class:`Template` constructor
135 an environment is created automatically. These environments are
136 created as shared environments which means that multiple templates
137 may have the same anonymous environment. For all shared environments
138 this attribute is `True`, else `False`.
139
140 .. attribute:: sandboxed
141
142 If the environment is sandboxed this attribute is `True`. For the
143 sandbox mode have a look at the documentation for the
144 :class:`~jinja2.sandbox.SandboxedEnvironment`.
145
146 .. attribute:: filters
147
148 A dict of filters for this environment. As long as no template was
Armin Ronacher7259c762008-04-30 13:03:59 +0200149 loaded it's safe to add new filters or remove old. For custom filters
Armin Ronacherd1ff8582008-05-11 00:30:43 +0200150 see :ref:`writing-filters`. For valid filter names have a look at
151 :ref:`identifier-naming`.
Armin Ronacher3c8b7ad2008-04-28 13:52:21 +0200152
153 .. attribute:: tests
154
Lukas Meuserad48a2e2008-05-01 18:19:57 +0200155 A dict of test functions for this environment. As long as no
156 template was loaded it's safe to modify this dict. For custom tests
Armin Ronacherd1ff8582008-05-11 00:30:43 +0200157 see :ref:`writing-tests`. For valid test names have a look at
158 :ref:`identifier-naming`.
Armin Ronacher3c8b7ad2008-04-28 13:52:21 +0200159
160 .. attribute:: globals
161
162 A dict of global variables. These variables are always available
Armin Ronacher981cbf62008-05-13 09:12:27 +0200163 in a template. As long as no template was loaded it's safe
Armin Ronacher7259c762008-04-30 13:03:59 +0200164 to modify this dict. For more details see :ref:`global-namespace`.
Armin Ronacherd1ff8582008-05-11 00:30:43 +0200165 For valid object names have a look at :ref:`identifier-naming`.
Armin Ronacher3c8b7ad2008-04-28 13:52:21 +0200166
Armin Ronachere2535202016-12-31 00:43:50 +0100167 .. attribute:: policies
168
169 A dictionary with :ref:`policies`. These can be reconfigured to
170 change the runtime behavior or certain template features. Usually
171 these are security related.
172
ThiefMaster14936312015-04-06 13:54:14 +0200173 .. attribute:: code_generator_class
174
175 The class used for code generation. This should not be changed
176 in most cases, unless you need to modify the Python code a
177 template compiles to.
178
ThiefMasterf22fdd52015-04-06 14:08:46 +0200179 .. attribute:: context_class
180
181 The context used for templates. This should not be changed
182 in most cases, unless you need to modify internals of how
183 template variables are handled. For details, see
184 :class:`~jinja2.runtime.Context`.
185
Armin Ronachered98cac2008-05-07 08:42:11 +0200186 .. automethod:: overlay([options])
187
Armin Ronacher58f351d2008-05-28 21:30:14 +0200188 .. method:: undefined([hint, obj, name, exc])
Armin Ronacher3c8b7ad2008-04-28 13:52:21 +0200189
Armin Ronacher5411ce72008-05-25 11:36:22 +0200190 Creates a new :class:`Undefined` object for `name`. This is useful
191 for filters or functions that may return undefined objects for
192 some operations. All parameters except of `hint` should be provided
193 as keyword parameters for better readability. The `hint` is used as
194 error message for the exception if provided, otherwise the error
Armin Ronacher0aa0f582009-03-18 01:01:36 +0100195 message will be generated from `obj` and `name` automatically. The exception
Armin Ronacher5411ce72008-05-25 11:36:22 +0200196 provided as `exc` is raised if something with the generated undefined
197 object is done that the undefined object does not allow. The default
198 exception is :exc:`UndefinedError`. If a `hint` is provided the
Alex Chan972c0302015-04-05 22:42:34 +0100199 `name` may be omitted.
Armin Ronacher5411ce72008-05-25 11:36:22 +0200200
201 The most common way to create an undefined object is by providing
202 a name only::
203
204 return environment.undefined(name='some_name')
205
206 This means that the name `some_name` is not defined. If the name
207 was from an attribute of an object it makes sense to tell the
208 undefined object the holder object to improve the error message::
209
210 if not hasattr(obj, 'attr'):
211 return environment.undefined(obj=obj, name='attr')
212
213 For a more complex example you can provide a hint. For example
214 the :func:`first` filter creates an undefined object that way::
215
216 return environment.undefined('no first item, sequence was empty')
217
218 If it the `name` or `obj` is known (for example because an attribute
Alex Chan972c0302015-04-05 22:42:34 +0100219 was accessed) it should be passed to the undefined object, even if
Armin Ronacher5411ce72008-05-25 11:36:22 +0200220 a custom `hint` is provided. This gives undefined objects the
221 possibility to enhance the error message.
222
223.. autoclass:: Template
Armin Ronacher9bb7e472008-05-28 11:26:59 +0200224 :members: module, make_module
Armin Ronacher3c8b7ad2008-04-28 13:52:21 +0200225
Armin Ronacher7259c762008-04-30 13:03:59 +0200226 .. attribute:: globals
227
Armin Ronachered98cac2008-05-07 08:42:11 +0200228 The dict with the globals of that template. It's unsafe to modify
229 this dict as it may be shared with other templates or the environment
230 that loaded the template.
Armin Ronacher7259c762008-04-30 13:03:59 +0200231
232 .. attribute:: name
233
Armin Ronachered98cac2008-05-07 08:42:11 +0200234 The loading name of the template. If the template was loaded from a
235 string this is `None`.
236
Armin Ronacher5411ce72008-05-25 11:36:22 +0200237 .. attribute:: filename
238
239 The filename of the template on the file system if it was loaded from
240 there. Otherwise this is `None`.
241
Armin Ronachered98cac2008-05-07 08:42:11 +0200242 .. automethod:: render([context])
243
244 .. automethod:: generate([context])
245
246 .. automethod:: stream([context])
Armin Ronacher7259c762008-04-30 13:03:59 +0200247
Armin Ronacherd8326d92016-12-28 22:51:46 +0100248 .. automethod:: render_async([context])
249
250 .. automethod:: generate_async([context])
251
Armin Ronacher3c8b7ad2008-04-28 13:52:21 +0200252
Armin Ronacher6df604e2008-05-23 22:18:38 +0200253.. autoclass:: jinja2.environment.TemplateStream()
Armin Ronacher74b51062008-06-17 11:28:59 +0200254 :members: disable_buffering, enable_buffering, dump
Armin Ronacher3c8b7ad2008-04-28 13:52:21 +0200255
256
Armin Ronacher1da23d12010-04-05 18:11:18 +0200257Autoescaping
258------------
259
Armin Ronachera27a5032017-01-07 15:55:20 +0100260.. versionchanged:: 2.4
Armin Ronacher1da23d12010-04-05 18:11:18 +0200261
Armin Ronachera27a5032017-01-07 15:55:20 +0100262Jinja2 now comes with autoescaping support. As of Jinja 2.9 the
263autoescape extension is removed and built-in. However autoescaping is
Armin Ronacherb81a8a32017-01-07 16:13:39 +0100264not yet enabled by default though this will most likely change in the
265future. It's recommended to configure a sensible default for
266autoescaping. This makes it possible to enable and disable autoescaping
267on a per-template basis (HTML versus text for instance).
268
269.. autofunction:: jinja2.select_autoescape
Armin Ronacher1da23d12010-04-05 18:11:18 +0200270
271Here a recommended setup that enables autoescaping for templates ending
272in ``'.html'``, ``'.htm'`` and ``'.xml'`` and disabling it by default
Armin Ronacherb81a8a32017-01-07 16:13:39 +0100273for all other extensions. You can use the :func:`~jinja2.select_autoescape`
274function for this::
Armin Ronacher1da23d12010-04-05 18:11:18 +0200275
Armin Ronacherb81a8a32017-01-07 16:13:39 +0100276 from jinja2 import Environment, select_autoescape
277 env = Environment(autoescape=select_autoescape(['html', 'htm', 'xml']),
Armin Ronachera27a5032017-01-07 15:55:20 +0100278 loader=PackageLoader('mypackage'))
Armin Ronacher1da23d12010-04-05 18:11:18 +0200279
Armin Ronacherb81a8a32017-01-07 16:13:39 +0100280The :func:`~jinja.select_autoescape` function returns a function that
281works rougly like this::
282
283 def autoescape(template_name):
284 if template_name is None:
285 return False
286 if template_name.endswith(('.html', '.htm', '.xml'))
287
Armin Ronacher1da23d12010-04-05 18:11:18 +0200288When implementing a guessing autoescape function, make sure you also
289accept `None` as valid template name. This will be passed when generating
Armin Ronacherb81a8a32017-01-07 16:13:39 +0100290templates from strings. You should always configure autoescaping as
291defaults in the future might change.
Armin Ronacher1da23d12010-04-05 18:11:18 +0200292
293Inside the templates the behaviour can be temporarily changed by using
294the `autoescape` block (see :ref:`autoescape-overrides`).
295
296
Armin Ronacherd1ff8582008-05-11 00:30:43 +0200297.. _identifier-naming:
298
299Notes on Identifiers
Armin Ronacher5411ce72008-05-25 11:36:22 +0200300--------------------
Armin Ronacherd1ff8582008-05-11 00:30:43 +0200301
302Jinja2 uses the regular Python 2.x naming rules. Valid identifiers have to
303match ``[a-zA-Z_][a-zA-Z0-9_]*``. As a matter of fact non ASCII characters
304are currently not allowed. This limitation will probably go away as soon as
305unicode identifiers are fully specified for Python 3.
306
307Filters and tests are looked up in separate namespaces and have slightly
308modified identifier syntax. Filters and tests may contain dots to group
309filters and tests by topic. For example it's perfectly valid to add a
310function into the filter dict and call it `to.unicode`. The regular
311expression for filter and test identifiers is
312``[a-zA-Z_][a-zA-Z0-9_]*(\.[a-zA-Z_][a-zA-Z0-9_]*)*```.
313
314
Armin Ronacher3c8b7ad2008-04-28 13:52:21 +0200315Undefined Types
316---------------
317
318These classes can be used as undefined types. The :class:`Environment`
319constructor takes an `undefined` parameter that can be one of those classes
320or a custom subclass of :class:`Undefined`. Whenever the template engine is
321unable to look up a name or access an attribute one of those objects is
322created and returned. Some operations on undefined values are then allowed,
323others fail.
324
325The closest to regular Python behavior is the `StrictUndefined` which
326disallows all operations beside testing if it's an undefined object.
327
Armin Ronachera816bf42008-09-17 21:28:01 +0200328.. autoclass:: jinja2.Undefined()
Armin Ronacher3c8b7ad2008-04-28 13:52:21 +0200329
Armin Ronacher9bb7e472008-05-28 11:26:59 +0200330 .. attribute:: _undefined_hint
331
332 Either `None` or an unicode string with the error message for
333 the undefined object.
334
335 .. attribute:: _undefined_obj
336
337 Either `None` or the owner object that caused the undefined object
338 to be created (for example because an attribute does not exist).
339
340 .. attribute:: _undefined_name
341
342 The name for the undefined variable / attribute or just `None`
343 if no such information exists.
344
345 .. attribute:: _undefined_exception
346
347 The exception that the undefined object wants to raise. This
348 is usually one of :exc:`UndefinedError` or :exc:`SecurityError`.
349
350 .. method:: _fail_with_undefined_error(\*args, \**kwargs)
351
352 When called with any arguments this method raises
353 :attr:`_undefined_exception` with an error message generated
354 from the undefined hints stored on the undefined object.
355
Armin Ronachera816bf42008-09-17 21:28:01 +0200356.. autoclass:: jinja2.DebugUndefined()
Armin Ronacher3c8b7ad2008-04-28 13:52:21 +0200357
Armin Ronachera816bf42008-09-17 21:28:01 +0200358.. autoclass:: jinja2.StrictUndefined()
Armin Ronacher5411ce72008-05-25 11:36:22 +0200359
Armin Ronacher6e9dfbf2014-06-06 22:14:45 +0600360There is also a factory function that can decorate undefined objects to
361implement logging on failures:
362
363.. autofunction:: jinja2.make_logging_undefined
364
Armin Ronacher5411ce72008-05-25 11:36:22 +0200365Undefined objects are created by calling :attr:`undefined`.
Armin Ronacher3c8b7ad2008-04-28 13:52:21 +0200366
Armin Ronacher9bb7e472008-05-28 11:26:59 +0200367.. admonition:: Implementation
368
369 :class:`Undefined` objects are implemented by overriding the special
370 `__underscore__` methods. For example the default :class:`Undefined`
371 class implements `__unicode__` in a way that it returns an empty
372 string, however `__int__` and others still fail with an exception. To
373 allow conversion to int by returning ``0`` you can implement your own::
374
375 class NullUndefined(Undefined):
376 def __int__(self):
377 return 0
378 def __float__(self):
379 return 0.0
380
381 To disallow a method, just override it and raise
Armin Ronacher58f351d2008-05-28 21:30:14 +0200382 :attr:`~Undefined._undefined_exception`. Because this is a very common
383 idom in undefined objects there is the helper method
384 :meth:`~Undefined._fail_with_undefined_error` that does the error raising
385 automatically. Here a class that works like the regular :class:`Undefined`
386 but chokes on iteration::
Armin Ronacher9bb7e472008-05-28 11:26:59 +0200387
388 class NonIterableUndefined(Undefined):
389 __iter__ = Undefined._fail_with_undefined_error
390
Armin Ronacher3c8b7ad2008-04-28 13:52:21 +0200391
Armin Ronacher7259c762008-04-30 13:03:59 +0200392The Context
393-----------
394
Armin Ronacher6df604e2008-05-23 22:18:38 +0200395.. autoclass:: jinja2.runtime.Context()
Armin Ronacherf35e2812008-05-06 16:04:10 +0200396 :members: resolve, get_exported, get_all
Armin Ronacher7259c762008-04-30 13:03:59 +0200397
398 .. attribute:: parent
399
400 A dict of read only, global variables the template looks up. These
Armin Ronacher19cf9c22008-05-01 12:49:53 +0200401 can either come from another :class:`Context`, from the
Armin Ronacher5411ce72008-05-25 11:36:22 +0200402 :attr:`Environment.globals` or :attr:`Template.globals` or points
403 to a dict created by combining the globals with the variables
404 passed to the render function. It must not be altered.
Armin Ronacher7259c762008-04-30 13:03:59 +0200405
406 .. attribute:: vars
407
408 The template local variables. This list contains environment and
409 context functions from the :attr:`parent` scope as well as local
410 modifications and exported variables from the template. The template
411 will modify this dict during template evaluation but filters and
412 context functions are not allowed to modify it.
413
414 .. attribute:: environment
415
416 The environment that loaded the template.
417
418 .. attribute:: exported_vars
419
420 This set contains all the names the template exports. The values for
421 the names are in the :attr:`vars` dict. In order to get a copy of the
422 exported variables as dict, :meth:`get_exported` can be used.
423
424 .. attribute:: name
425
426 The load name of the template owning this context.
427
428 .. attribute:: blocks
429
430 A dict with the current mapping of blocks in the template. The keys
431 in this dict are the names of the blocks, and the values a list of
432 blocks registered. The last item in each list is the current active
433 block (latest in the inheritance chain).
434
Armin Ronacherfe150f32010-03-15 02:42:41 +0100435 .. attribute:: eval_ctx
436
437 The current :ref:`eval-context`.
438
Armin Ronacher9bb7e472008-05-28 11:26:59 +0200439 .. automethod:: jinja2.runtime.Context.call(callable, \*args, \**kwargs)
440
441
442.. admonition:: Implementation
443
444 Context is immutable for the same reason Python's frame locals are
445 immutable inside functions. Both Jinja2 and Python are not using the
446 context / frame locals as data storage for variables but only as primary
447 data source.
448
449 When a template accesses a variable the template does not define, Jinja2
450 looks up the variable in the context, after that the variable is treated
451 as if it was defined in the template.
452
Armin Ronacher7259c762008-04-30 13:03:59 +0200453
Armin Ronacher5cdc1ac2008-05-07 12:17:18 +0200454.. _loaders:
455
Armin Ronacher3c8b7ad2008-04-28 13:52:21 +0200456Loaders
457-------
458
459Loaders are responsible for loading templates from a resource such as the
Armin Ronacher7259c762008-04-30 13:03:59 +0200460file system. The environment will keep the compiled modules in memory like
461Python's `sys.modules`. Unlike `sys.modules` however this cache is limited in
462size by default and templates are automatically reloaded.
Armin Ronachercda43df2008-05-03 17:10:05 +0200463All loaders are subclasses of :class:`BaseLoader`. If you want to create your
Armin Ronachercda43df2008-05-03 17:10:05 +0200464own loader, subclass :class:`BaseLoader` and override `get_source`.
465
Armin Ronachera816bf42008-09-17 21:28:01 +0200466.. autoclass:: jinja2.BaseLoader
Armin Ronachercda43df2008-05-03 17:10:05 +0200467 :members: get_source, load
468
469Here a list of the builtin loaders Jinja2 provides:
Armin Ronacher3c8b7ad2008-04-28 13:52:21 +0200470
Armin Ronachera816bf42008-09-17 21:28:01 +0200471.. autoclass:: jinja2.FileSystemLoader
Armin Ronacher3c8b7ad2008-04-28 13:52:21 +0200472
Armin Ronachera816bf42008-09-17 21:28:01 +0200473.. autoclass:: jinja2.PackageLoader
Armin Ronacher3c8b7ad2008-04-28 13:52:21 +0200474
Armin Ronachera816bf42008-09-17 21:28:01 +0200475.. autoclass:: jinja2.DictLoader
Armin Ronacher3c8b7ad2008-04-28 13:52:21 +0200476
Armin Ronachera816bf42008-09-17 21:28:01 +0200477.. autoclass:: jinja2.FunctionLoader
Armin Ronacher3c8b7ad2008-04-28 13:52:21 +0200478
Armin Ronachera816bf42008-09-17 21:28:01 +0200479.. autoclass:: jinja2.PrefixLoader
Armin Ronacher3c8b7ad2008-04-28 13:52:21 +0200480
Armin Ronachera816bf42008-09-17 21:28:01 +0200481.. autoclass:: jinja2.ChoiceLoader
482
Armin Ronacher46844982011-01-29 20:19:58 +0100483.. autoclass:: jinja2.ModuleLoader
484
Armin Ronachera816bf42008-09-17 21:28:01 +0200485
486.. _bytecode-cache:
487
488Bytecode Cache
489--------------
490
491Jinja 2.1 and higher support external bytecode caching. Bytecode caches make
492it possible to store the generated bytecode on the file system or a different
493location to avoid parsing the templates on first use.
494
495This is especially useful if you have a web application that is initialized on
496the first request and Jinja compiles many templates at once which slows down
497the application.
498
Jakub Wilk3fc008b2013-05-25 23:37:34 +0200499To use a bytecode cache, instantiate it and pass it to the :class:`Environment`.
Armin Ronachera816bf42008-09-17 21:28:01 +0200500
501.. autoclass:: jinja2.BytecodeCache
502 :members: load_bytecode, dump_bytecode, clear
503
504.. autoclass:: jinja2.bccache.Bucket
505 :members: write_bytecode, load_bytecode, bytecode_from_string,
506 bytecode_to_string, reset
507
508 .. attribute:: environment
509
510 The :class:`Environment` that created the bucket.
511
512 .. attribute:: key
513
514 The unique cache key for this bucket
515
516 .. attribute:: code
517
518 The bytecode if it's loaded, otherwise `None`.
519
520
521Builtin bytecode caches:
522
523.. autoclass:: jinja2.FileSystemBytecodeCache
Armin Ronacher3c8b7ad2008-04-28 13:52:21 +0200524
Armin Ronacheraa1d17d2008-09-18 18:09:06 +0200525.. autoclass:: jinja2.MemcachedBytecodeCache
526
Armin Ronacher3c8b7ad2008-04-28 13:52:21 +0200527
Armin Ronacherd8326d92016-12-28 22:51:46 +0100528Async Support
529-------------
530
531Starting with version 2.9, Jinja2 also supports the Python `async` and
532`await` constructs. As far as template designers go this feature is
533entirely opaque to them however as a developer you should be aware of how
534it's implemented as it influences what type of APIs you can safely expose
535to the template environment.
536
537First you need to be aware that by default async support is disabled as
538enabling it will generate different template code behind the scenes which
539passes everything through the asyncio event loop. This is important to
540understand because it has some impact to what you are doing:
541
542* template rendering will require an event loop to be set for the
543 current thread (``asyncio.get_event_loop`` needs to return one)
544* all template generation code internally runs async generators which
545 means that you will pay a performance penalty even if the non sync
546 methods are used!
547* The sync methods are based on async methods if the async mode is
548 enabled which means that `render` for instance will internally invoke
549 `render_async` and run it as part of the current event loop until the
550 execution finished.
551
552Awaitable objects can be returned from functions in templates and any
553function call in a template will automatically await the result. This
554means that you can let provide a method that asynchronously loads data
555from a database if you so desire and from the template designer's point of
556view this is just another function they can call. This means that the
557``await`` you would normally issue in Python is implied. However this
558only applies to function calls. If an attribute for instance would be an
559avaitable object then this would not result in the expected behavior.
560
561Likewise iterations with a `for` loop support async iterators.
562
Armin Ronachere2535202016-12-31 00:43:50 +0100563.. _policies:
564
565Policies
566--------
567
568Starting with Jinja 2.9 policies can be configured on the environment
569which can slightly influence how filters and other template constructs
570behave. They can be configured with the
571:attr:`~jinja2.Environment.policies` attribute.
572
573Example::
574
575 env.policies['urlize.rel'] = 'nofollow noopener'
576
Armin Ronacher028f0582017-01-07 14:57:44 +0100577``compiler.ascii_str``:
578 This boolean controls on Python 2 if Jinja2 should store ASCII only
579 literals as bytestring instead of unicode strings. This used to be
580 always enabled for Jinja versions below 2.9 and now can be changed.
581 Traditionally it was done this way since some APIs in Python 2 failed
582 badly for unicode strings (for instance the datetime strftime API).
583 Now however sometimes the inverse is true (for instance str.format).
584 If this is set to False then all strings are stored as unicode
585 internally.
586
Armin Ronachere2535202016-12-31 00:43:50 +0100587``urlize.rel``:
588 A string that defines the items for the `rel` attribute of generated
589 links with the `urlize` filter. These items are always added. The
590 default is `noopener`.
591
592``urlize.target``:
593 The default target that is issued for links from the `urlize` filter
594 if no other target is defined by the call explicitly.
595
Armin Ronachere71a1302017-01-06 21:33:51 +0100596``json.dumps_function``:
597 If this is set to a value other than `None` then the `tojson` filter
598 will dump with this function instead of the default one. Note that
599 this function should accept arbitrary extra arguments which might be
600 passed in the future from the filter. Currently the only argument
601 that might be passed is `indent`. The default dump function is
602 ``json.dumps``.
603
604``json.dumps_kwargs``:
605 Keyword arguments to be passed to the dump function. The default is
606 ``{'sort_keys': True}``.
607
Armin Ronacherd8326d92016-12-28 22:51:46 +0100608
Armin Ronacher3c8b7ad2008-04-28 13:52:21 +0200609Utilities
610---------
611
612These helper functions and classes are useful if you add custom filters or
613functions to a Jinja2 environment.
614
Armin Ronachera816bf42008-09-17 21:28:01 +0200615.. autofunction:: jinja2.environmentfilter
Armin Ronacher3c8b7ad2008-04-28 13:52:21 +0200616
Armin Ronachera816bf42008-09-17 21:28:01 +0200617.. autofunction:: jinja2.contextfilter
Armin Ronacher3c8b7ad2008-04-28 13:52:21 +0200618
Armin Ronacherfe150f32010-03-15 02:42:41 +0100619.. autofunction:: jinja2.evalcontextfilter
620
Armin Ronachera816bf42008-09-17 21:28:01 +0200621.. autofunction:: jinja2.environmentfunction
Armin Ronacher3c8b7ad2008-04-28 13:52:21 +0200622
Armin Ronachera816bf42008-09-17 21:28:01 +0200623.. autofunction:: jinja2.contextfunction
Armin Ronacher3c8b7ad2008-04-28 13:52:21 +0200624
Armin Ronacherfe150f32010-03-15 02:42:41 +0100625.. autofunction:: jinja2.evalcontextfunction
626
Armin Ronacher3c8b7ad2008-04-28 13:52:21 +0200627.. function:: escape(s)
628
Armin Ronacher9bb7e472008-05-28 11:26:59 +0200629 Convert the characters ``&``, ``<``, ``>``, ``'``, and ``"`` in string `s`
630 to HTML-safe sequences. Use this if you need to display text that might
631 contain such characters in HTML. This function will not escaped objects
632 that do have an HTML representation such as already escaped data.
633
634 The return value is a :class:`Markup` string.
Armin Ronacher3c8b7ad2008-04-28 13:52:21 +0200635
Armin Ronachera816bf42008-09-17 21:28:01 +0200636.. autofunction:: jinja2.clear_caches
Armin Ronacher187bde12008-05-01 18:19:16 +0200637
Armin Ronachera816bf42008-09-17 21:28:01 +0200638.. autofunction:: jinja2.is_undefined
Armin Ronacher9bb7e472008-05-28 11:26:59 +0200639
Armin Ronachera816bf42008-09-17 21:28:01 +0200640.. autoclass:: jinja2.Markup([string])
Armin Ronacher58f351d2008-05-28 21:30:14 +0200641 :members: escape, unescape, striptags
642
643.. admonition:: Note
644
645 The Jinja2 :class:`Markup` class is compatible with at least Pylons and
646 Genshi. It's expected that more template engines and framework will pick
647 up the `__html__` concept soon.
Armin Ronacher3c8b7ad2008-04-28 13:52:21 +0200648
649
650Exceptions
651----------
652
Armin Ronachera816bf42008-09-17 21:28:01 +0200653.. autoexception:: jinja2.TemplateError
Armin Ronacher3c8b7ad2008-04-28 13:52:21 +0200654
Armin Ronachera816bf42008-09-17 21:28:01 +0200655.. autoexception:: jinja2.UndefinedError
Armin Ronacher3c8b7ad2008-04-28 13:52:21 +0200656
Armin Ronachera816bf42008-09-17 21:28:01 +0200657.. autoexception:: jinja2.TemplateNotFound
Armin Ronacher3c8b7ad2008-04-28 13:52:21 +0200658
Armin Ronacher31bbd9e2010-01-14 00:41:30 +0100659.. autoexception:: jinja2.TemplatesNotFound
660
Armin Ronachera816bf42008-09-17 21:28:01 +0200661.. autoexception:: jinja2.TemplateSyntaxError
Armin Ronacher3c8b7ad2008-04-28 13:52:21 +0200662
Armin Ronacherf3c35c42008-05-23 23:18:14 +0200663 .. attribute:: message
664
665 The error message as utf-8 bytestring.
666
667 .. attribute:: lineno
668
669 The line number where the error occurred
670
671 .. attribute:: name
672
673 The load name for the template as unicode string.
674
675 .. attribute:: filename
676
677 The filename that loaded the template as bytestring in the encoding
678 of the file system (most likely utf-8 or mbcs on Windows systems).
679
680 The reason why the filename and error message are bytestrings and not
681 unicode strings is that Python 2.x is not using unicode for exceptions
682 and tracebacks as well as the compiler. This will change with Python 3.
683
Armin Ronachera816bf42008-09-17 21:28:01 +0200684.. autoexception:: jinja2.TemplateAssertionError
Armin Ronacher7259c762008-04-30 13:03:59 +0200685
686
687.. _writing-filters:
688
689Custom Filters
690--------------
691
692Custom filters are just regular Python functions that take the left side of
Guillaume Paumier345e0ba2016-04-10 08:58:06 -0700693the filter as first argument and the arguments passed to the filter as
Armin Ronacher7259c762008-04-30 13:03:59 +0200694extra arguments or keyword arguments.
695
696For example in the filter ``{{ 42|myfilter(23) }}`` the function would be
697called with ``myfilter(42, 23)``. Here for example a simple filter that can
698be applied to datetime objects to format them::
699
700 def datetimeformat(value, format='%H:%M / %d-%m-%Y'):
701 return value.strftime(format)
702
703You can register it on the template environment by updating the
704:attr:`~Environment.filters` dict on the environment::
705
706 environment.filters['datetimeformat'] = datetimeformat
707
708Inside the template it can then be used as follows:
709
710.. sourcecode:: jinja
711
712 written on: {{ article.pub_date|datetimeformat }}
713 publication date: {{ article.pub_date|datetimeformat('%d-%m-%Y') }}
714
715Filters can also be passed the current template context or environment. This
Armin Ronacher0aa0f582009-03-18 01:01:36 +0100716is useful if a filter wants to return an undefined value or check the current
Armin Ronacher2e3c9c72010-04-10 13:03:46 +0200717:attr:`~Environment.autoescape` setting. For this purpose three decorators
Armin Ronacherfe150f32010-03-15 02:42:41 +0100718exist: :func:`environmentfilter`, :func:`contextfilter` and
719:func:`evalcontextfilter`.
Armin Ronacher7259c762008-04-30 13:03:59 +0200720
721Here a small example filter that breaks a text into HTML line breaks and
722paragraphs and marks the return value as safe HTML string if autoescaping is
723enabled::
724
725 import re
Jeffrey Finkelstein449ef022011-07-01 15:46:54 -0700726 from jinja2 import evalcontextfilter, Markup, escape
Armin Ronacher7259c762008-04-30 13:03:59 +0200727
728 _paragraph_re = re.compile(r'(?:\r\n|\r|\n){2,}')
729
Armin Ronacherfe150f32010-03-15 02:42:41 +0100730 @evalcontextfilter
731 def nl2br(eval_ctx, value):
Jörn Hees17024512014-06-15 18:31:16 +0200732 result = u'\n\n'.join(u'<p>%s</p>' % p.replace('\n', Markup('<br>\n'))
Armin Ronacher7259c762008-04-30 13:03:59 +0200733 for p in _paragraph_re.split(escape(value)))
Armin Ronacherfe150f32010-03-15 02:42:41 +0100734 if eval_ctx.autoescape:
Armin Ronacher7259c762008-04-30 13:03:59 +0200735 result = Markup(result)
736 return result
737
738Context filters work the same just that the first argument is the current
Armin Ronacher19cf9c22008-05-01 12:49:53 +0200739active :class:`Context` rather then the environment.
Armin Ronacher7259c762008-04-30 13:03:59 +0200740
741
Armin Ronacherfe150f32010-03-15 02:42:41 +0100742.. _eval-context:
743
744Evaluation Context
745------------------
746
747The evaluation context (short eval context or eval ctx) is a new object
Jakub Wilk3fc008b2013-05-25 23:37:34 +0200748introduced in Jinja 2.4 that makes it possible to activate and deactivate
Armin Ronacherfe150f32010-03-15 02:42:41 +0100749compiled features at runtime.
750
751Currently it is only used to enable and disable the automatic escaping but
752can be used for extensions as well.
753
754In previous Jinja versions filters and functions were marked as
755environment callables in order to check for the autoescape status from the
756environment. In new versions it's encouraged to check the setting from the
757evaluation context instead.
758
759Previous versions::
760
761 @environmentfilter
762 def filter(env, value):
763 result = do_something(value)
764 if env.autoescape:
765 result = Markup(result)
766 return result
767
768In new versions you can either use a :func:`contextfilter` and access the
769evaluation context from the actual context, or use a
770:func:`evalcontextfilter` which directly passes the evaluation context to
771the function::
772
773 @contextfilter
774 def filter(context, value):
775 result = do_something(value)
776 if context.eval_ctx.autoescape:
777 result = Markup(result)
778 return result
779
780 @evalcontextfilter
781 def filter(eval_ctx, value):
782 result = do_something(value)
783 if eval_ctx.autoescape:
784 result = Markup(result)
785 return result
786
787The evaluation context must not be modified at runtime. Modifications
788must only happen with a :class:`nodes.EvalContextModifier` and
789:class:`nodes.ScopedEvalContextModifier` from an extension, not on the
790eval context object itself.
791
Armin Ronacher76ae15e2010-03-15 09:36:47 +0100792.. autoclass:: jinja2.nodes.EvalContext
Armin Ronacher30fda272010-03-15 03:06:04 +0100793
794 .. attribute:: autoescape
795
796 `True` or `False` depending on if autoescaping is active or not.
797
798 .. attribute:: volatile
799
800 `True` if the compiler cannot evaluate some expressions at compile
801 time. At runtime this should always be `False`.
802
803
Armin Ronacher7259c762008-04-30 13:03:59 +0200804.. _writing-tests:
805
806Custom Tests
807------------
808
Armin Ronachera5d8f552008-09-11 20:46:34 +0200809Tests work like filters just that there is no way for a test to get access
Armin Ronacher7259c762008-04-30 13:03:59 +0200810to the environment or context and that they can't be chained. The return
Armin Ronachera5d8f552008-09-11 20:46:34 +0200811value of a test should be `True` or `False`. The purpose of a test is to
Armin Ronacher7259c762008-04-30 13:03:59 +0200812give the template designers the possibility to perform type and conformability
813checks.
814
Armin Ronachera5d8f552008-09-11 20:46:34 +0200815Here a simple test that checks if a variable is a prime number::
Armin Ronacher7259c762008-04-30 13:03:59 +0200816
817 import math
818
819 def is_prime(n):
820 if n == 2:
821 return True
822 for i in xrange(2, int(math.ceil(math.sqrt(n))) + 1):
823 if n % i == 0:
824 return False
825 return True
826
827
828You can register it on the template environment by updating the
829:attr:`~Environment.tests` dict on the environment::
830
831 environment.tests['prime'] = is_prime
832
833A template designer can then use the test like this:
834
835.. sourcecode:: jinja
836
837 {% if 42 is prime %}
838 42 is a prime number
839 {% else %}
840 42 is not a prime number
841 {% endif %}
842
843
844.. _global-namespace:
845
846The Global Namespace
847--------------------
848
Armin Ronacher981cbf62008-05-13 09:12:27 +0200849Variables stored in the :attr:`Environment.globals` dict are special as they
850are available for imported templates too, even if they are imported without
851context. This is the place where you can put variables and functions
852that should be available all the time. Additionally :attr:`Template.globals`
853exist that are variables available to a specific template that are available
854to all :meth:`~Template.render` calls.
Armin Ronacher5411ce72008-05-25 11:36:22 +0200855
856
Armin Ronacher9bb7e472008-05-28 11:26:59 +0200857.. _low-level-api:
858
Armin Ronacher5411ce72008-05-25 11:36:22 +0200859Low Level API
860-------------
861
862The low level API exposes functionality that can be useful to understand some
863implementation details, debugging purposes or advanced :ref:`extension
Armin Ronacher61a5a242008-05-26 12:07:44 +0200864<jinja-extensions>` techniques. Unless you know exactly what you are doing we
865don't recommend using any of those.
Armin Ronacher5411ce72008-05-25 11:36:22 +0200866
867.. automethod:: Environment.lex
868
869.. automethod:: Environment.parse
870
Armin Ronacher9ad96e72008-06-13 22:44:01 +0200871.. automethod:: Environment.preprocess
872
Armin Ronacher5411ce72008-05-25 11:36:22 +0200873.. automethod:: Template.new_context
874
875.. method:: Template.root_render_func(context)
876
877 This is the low level render function. It's passed a :class:`Context`
878 that has to be created by :meth:`new_context` of the same template or
879 a compatible template. This render function is generated by the
880 compiler from the template code and returns a generator that yields
881 unicode strings.
882
883 If an exception in the template code happens the template engine will
884 not rewrite the exception but pass through the original one. As a
885 matter of fact this function should only be called from within a
886 :meth:`render` / :meth:`generate` / :meth:`stream` call.
887
888.. attribute:: Template.blocks
889
890 A dict of block render functions. Each of these functions works exactly
891 like the :meth:`root_render_func` with the same limitations.
892
893.. attribute:: Template.is_up_to_date
894
895 This attribute is `False` if there is a newer version of the template
896 available, otherwise `True`.
Armin Ronacher9bb7e472008-05-28 11:26:59 +0200897
898.. admonition:: Note
899
Armin Ronacher58f351d2008-05-28 21:30:14 +0200900 The low-level API is fragile. Future Jinja2 versions will try not to
901 change it in a backwards incompatible way but modifications in the Jinja2
902 core may shine through. For example if Jinja2 introduces a new AST node
903 in later versions that may be returned by :meth:`~Environment.parse`.
Armin Ronacher63cf9b82009-07-26 10:33:36 +0200904
905The Meta API
906------------
907
908.. versionadded:: 2.2
909
910The meta API returns some information about abstract syntax trees that
911could help applications to implement more advanced template concepts. All
912the functions of the meta API operate on an abstract syntax tree as
913returned by the :meth:`Environment.parse` method.
914
915.. autofunction:: jinja2.meta.find_undeclared_variables
916
917.. autofunction:: jinja2.meta.find_referenced_templates