blob: a11ddde7986757388977274542dd595559af7b01 [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
David Lordf77b09d2019-07-24 14:18:02 -070022initialization 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
David Lord06696562019-07-26 12:12:41 -0700117.. _Unicode documentation: https://docs.python.org/3/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
David Lordf77b09d2019-07-24 14:18:02 -0700216 return environment.undefined('no first item, sequence was empty')
Armin Ronacher5411ce72008-05-25 11:36:22 +0200217
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 Ronacherfb47dfa2017-01-10 09:21:14 +0100587``truncate.leeway``:
588 Configures the leeway default for the `truncate` filter. Leeway as
589 introduced in 2.9 but to restore compatibility with older templates
590 it can be configured to `0` to get the old behavior back. The default
591 is `5`.
592
Armin Ronachere2535202016-12-31 00:43:50 +0100593``urlize.rel``:
594 A string that defines the items for the `rel` attribute of generated
595 links with the `urlize` filter. These items are always added. The
596 default is `noopener`.
597
598``urlize.target``:
599 The default target that is issued for links from the `urlize` filter
600 if no other target is defined by the call explicitly.
601
Armin Ronachere71a1302017-01-06 21:33:51 +0100602``json.dumps_function``:
603 If this is set to a value other than `None` then the `tojson` filter
604 will dump with this function instead of the default one. Note that
605 this function should accept arbitrary extra arguments which might be
606 passed in the future from the filter. Currently the only argument
607 that might be passed is `indent`. The default dump function is
608 ``json.dumps``.
609
610``json.dumps_kwargs``:
611 Keyword arguments to be passed to the dump function. The default is
612 ``{'sort_keys': True}``.
613
Armin Ronacherd8326d92016-12-28 22:51:46 +0100614
Armin Ronacher3c8b7ad2008-04-28 13:52:21 +0200615Utilities
616---------
617
618These helper functions and classes are useful if you add custom filters or
619functions to a Jinja2 environment.
620
Armin Ronachera816bf42008-09-17 21:28:01 +0200621.. autofunction:: jinja2.environmentfilter
Armin Ronacher3c8b7ad2008-04-28 13:52:21 +0200622
Armin Ronachera816bf42008-09-17 21:28:01 +0200623.. autofunction:: jinja2.contextfilter
Armin Ronacher3c8b7ad2008-04-28 13:52:21 +0200624
Armin Ronacherfe150f32010-03-15 02:42:41 +0100625.. autofunction:: jinja2.evalcontextfilter
626
Armin Ronachera816bf42008-09-17 21:28:01 +0200627.. autofunction:: jinja2.environmentfunction
Armin Ronacher3c8b7ad2008-04-28 13:52:21 +0200628
Armin Ronachera816bf42008-09-17 21:28:01 +0200629.. autofunction:: jinja2.contextfunction
Armin Ronacher3c8b7ad2008-04-28 13:52:21 +0200630
Armin Ronacherfe150f32010-03-15 02:42:41 +0100631.. autofunction:: jinja2.evalcontextfunction
632
Armin Ronacher3c8b7ad2008-04-28 13:52:21 +0200633.. function:: escape(s)
634
Armin Ronacher9bb7e472008-05-28 11:26:59 +0200635 Convert the characters ``&``, ``<``, ``>``, ``'``, and ``"`` in string `s`
636 to HTML-safe sequences. Use this if you need to display text that might
637 contain such characters in HTML. This function will not escaped objects
638 that do have an HTML representation such as already escaped data.
639
640 The return value is a :class:`Markup` string.
Armin Ronacher3c8b7ad2008-04-28 13:52:21 +0200641
Armin Ronachera816bf42008-09-17 21:28:01 +0200642.. autofunction:: jinja2.clear_caches
Armin Ronacher187bde12008-05-01 18:19:16 +0200643
Armin Ronachera816bf42008-09-17 21:28:01 +0200644.. autofunction:: jinja2.is_undefined
Armin Ronacher9bb7e472008-05-28 11:26:59 +0200645
Armin Ronachera816bf42008-09-17 21:28:01 +0200646.. autoclass:: jinja2.Markup([string])
Armin Ronacher58f351d2008-05-28 21:30:14 +0200647 :members: escape, unescape, striptags
648
649.. admonition:: Note
650
651 The Jinja2 :class:`Markup` class is compatible with at least Pylons and
652 Genshi. It's expected that more template engines and framework will pick
653 up the `__html__` concept soon.
Armin Ronacher3c8b7ad2008-04-28 13:52:21 +0200654
655
656Exceptions
657----------
658
Armin Ronachera816bf42008-09-17 21:28:01 +0200659.. autoexception:: jinja2.TemplateError
Armin Ronacher3c8b7ad2008-04-28 13:52:21 +0200660
Armin Ronachera816bf42008-09-17 21:28:01 +0200661.. autoexception:: jinja2.UndefinedError
Armin Ronacher3c8b7ad2008-04-28 13:52:21 +0200662
Armin Ronachera816bf42008-09-17 21:28:01 +0200663.. autoexception:: jinja2.TemplateNotFound
Armin Ronacher3c8b7ad2008-04-28 13:52:21 +0200664
Armin Ronacher31bbd9e2010-01-14 00:41:30 +0100665.. autoexception:: jinja2.TemplatesNotFound
666
Armin Ronachera816bf42008-09-17 21:28:01 +0200667.. autoexception:: jinja2.TemplateSyntaxError
Armin Ronacher3c8b7ad2008-04-28 13:52:21 +0200668
Armin Ronacherf3c35c42008-05-23 23:18:14 +0200669 .. attribute:: message
670
671 The error message as utf-8 bytestring.
672
673 .. attribute:: lineno
674
675 The line number where the error occurred
676
677 .. attribute:: name
678
679 The load name for the template as unicode string.
680
681 .. attribute:: filename
682
683 The filename that loaded the template as bytestring in the encoding
684 of the file system (most likely utf-8 or mbcs on Windows systems).
685
686 The reason why the filename and error message are bytestrings and not
687 unicode strings is that Python 2.x is not using unicode for exceptions
688 and tracebacks as well as the compiler. This will change with Python 3.
689
Armin Ronachera816bf42008-09-17 21:28:01 +0200690.. autoexception:: jinja2.TemplateAssertionError
Armin Ronacher7259c762008-04-30 13:03:59 +0200691
692
693.. _writing-filters:
694
695Custom Filters
696--------------
697
698Custom filters are just regular Python functions that take the left side of
Guillaume Paumier345e0ba2016-04-10 08:58:06 -0700699the filter as first argument and the arguments passed to the filter as
Armin Ronacher7259c762008-04-30 13:03:59 +0200700extra arguments or keyword arguments.
701
702For example in the filter ``{{ 42|myfilter(23) }}`` the function would be
703called with ``myfilter(42, 23)``. Here for example a simple filter that can
704be applied to datetime objects to format them::
705
706 def datetimeformat(value, format='%H:%M / %d-%m-%Y'):
707 return value.strftime(format)
708
709You can register it on the template environment by updating the
710:attr:`~Environment.filters` dict on the environment::
711
712 environment.filters['datetimeformat'] = datetimeformat
713
714Inside the template it can then be used as follows:
715
716.. sourcecode:: jinja
717
718 written on: {{ article.pub_date|datetimeformat }}
719 publication date: {{ article.pub_date|datetimeformat('%d-%m-%Y') }}
720
721Filters can also be passed the current template context or environment. This
Armin Ronacher0aa0f582009-03-18 01:01:36 +0100722is useful if a filter wants to return an undefined value or check the current
Armin Ronacher2e3c9c72010-04-10 13:03:46 +0200723:attr:`~Environment.autoescape` setting. For this purpose three decorators
Armin Ronacherfe150f32010-03-15 02:42:41 +0100724exist: :func:`environmentfilter`, :func:`contextfilter` and
725:func:`evalcontextfilter`.
Armin Ronacher7259c762008-04-30 13:03:59 +0200726
727Here a small example filter that breaks a text into HTML line breaks and
728paragraphs and marks the return value as safe HTML string if autoescaping is
729enabled::
730
731 import re
Jeffrey Finkelstein449ef022011-07-01 15:46:54 -0700732 from jinja2 import evalcontextfilter, Markup, escape
Armin Ronacher7259c762008-04-30 13:03:59 +0200733
734 _paragraph_re = re.compile(r'(?:\r\n|\r|\n){2,}')
735
Armin Ronacherfe150f32010-03-15 02:42:41 +0100736 @evalcontextfilter
737 def nl2br(eval_ctx, value):
Jörn Hees17024512014-06-15 18:31:16 +0200738 result = u'\n\n'.join(u'<p>%s</p>' % p.replace('\n', Markup('<br>\n'))
Armin Ronacher7259c762008-04-30 13:03:59 +0200739 for p in _paragraph_re.split(escape(value)))
Armin Ronacherfe150f32010-03-15 02:42:41 +0100740 if eval_ctx.autoescape:
Armin Ronacher7259c762008-04-30 13:03:59 +0200741 result = Markup(result)
742 return result
743
744Context filters work the same just that the first argument is the current
Daniel van Flymen96f52e62017-03-01 14:10:34 -0500745active :class:`Context` rather than the environment.
Armin Ronacher7259c762008-04-30 13:03:59 +0200746
747
Armin Ronacherfe150f32010-03-15 02:42:41 +0100748.. _eval-context:
749
750Evaluation Context
751------------------
752
753The evaluation context (short eval context or eval ctx) is a new object
Jakub Wilk3fc008b2013-05-25 23:37:34 +0200754introduced in Jinja 2.4 that makes it possible to activate and deactivate
Armin Ronacherfe150f32010-03-15 02:42:41 +0100755compiled features at runtime.
756
757Currently it is only used to enable and disable the automatic escaping but
758can be used for extensions as well.
759
760In previous Jinja versions filters and functions were marked as
761environment callables in order to check for the autoescape status from the
762environment. In new versions it's encouraged to check the setting from the
763evaluation context instead.
764
765Previous versions::
766
767 @environmentfilter
768 def filter(env, value):
769 result = do_something(value)
770 if env.autoescape:
771 result = Markup(result)
772 return result
773
774In new versions you can either use a :func:`contextfilter` and access the
775evaluation context from the actual context, or use a
776:func:`evalcontextfilter` which directly passes the evaluation context to
777the function::
778
779 @contextfilter
780 def filter(context, value):
781 result = do_something(value)
782 if context.eval_ctx.autoescape:
783 result = Markup(result)
784 return result
785
786 @evalcontextfilter
787 def filter(eval_ctx, value):
788 result = do_something(value)
789 if eval_ctx.autoescape:
790 result = Markup(result)
791 return result
792
793The evaluation context must not be modified at runtime. Modifications
794must only happen with a :class:`nodes.EvalContextModifier` and
795:class:`nodes.ScopedEvalContextModifier` from an extension, not on the
796eval context object itself.
797
Armin Ronacher76ae15e2010-03-15 09:36:47 +0100798.. autoclass:: jinja2.nodes.EvalContext
Armin Ronacher30fda272010-03-15 03:06:04 +0100799
800 .. attribute:: autoescape
801
802 `True` or `False` depending on if autoescaping is active or not.
803
804 .. attribute:: volatile
805
806 `True` if the compiler cannot evaluate some expressions at compile
807 time. At runtime this should always be `False`.
808
809
Armin Ronacher7259c762008-04-30 13:03:59 +0200810.. _writing-tests:
811
812Custom Tests
813------------
814
Armin Ronachera5d8f552008-09-11 20:46:34 +0200815Tests work like filters just that there is no way for a test to get access
Armin Ronacher7259c762008-04-30 13:03:59 +0200816to the environment or context and that they can't be chained. The return
Armin Ronachera5d8f552008-09-11 20:46:34 +0200817value of a test should be `True` or `False`. The purpose of a test is to
Armin Ronacher7259c762008-04-30 13:03:59 +0200818give the template designers the possibility to perform type and conformability
819checks.
820
Armin Ronachera5d8f552008-09-11 20:46:34 +0200821Here a simple test that checks if a variable is a prime number::
Armin Ronacher7259c762008-04-30 13:03:59 +0200822
823 import math
824
825 def is_prime(n):
826 if n == 2:
827 return True
828 for i in xrange(2, int(math.ceil(math.sqrt(n))) + 1):
829 if n % i == 0:
830 return False
831 return True
David Lordf77b09d2019-07-24 14:18:02 -0700832
Armin Ronacher7259c762008-04-30 13:03:59 +0200833
834You can register it on the template environment by updating the
835:attr:`~Environment.tests` dict on the environment::
836
837 environment.tests['prime'] = is_prime
838
839A template designer can then use the test like this:
840
841.. sourcecode:: jinja
842
843 {% if 42 is prime %}
844 42 is a prime number
845 {% else %}
846 42 is not a prime number
847 {% endif %}
848
849
850.. _global-namespace:
851
852The Global Namespace
853--------------------
854
Armin Ronacher981cbf62008-05-13 09:12:27 +0200855Variables stored in the :attr:`Environment.globals` dict are special as they
856are available for imported templates too, even if they are imported without
857context. This is the place where you can put variables and functions
858that should be available all the time. Additionally :attr:`Template.globals`
859exist that are variables available to a specific template that are available
860to all :meth:`~Template.render` calls.
Armin Ronacher5411ce72008-05-25 11:36:22 +0200861
862
Armin Ronacher9bb7e472008-05-28 11:26:59 +0200863.. _low-level-api:
864
Armin Ronacher5411ce72008-05-25 11:36:22 +0200865Low Level API
866-------------
867
868The low level API exposes functionality that can be useful to understand some
869implementation details, debugging purposes or advanced :ref:`extension
Armin Ronacher61a5a242008-05-26 12:07:44 +0200870<jinja-extensions>` techniques. Unless you know exactly what you are doing we
871don't recommend using any of those.
Armin Ronacher5411ce72008-05-25 11:36:22 +0200872
873.. automethod:: Environment.lex
874
875.. automethod:: Environment.parse
876
Armin Ronacher9ad96e72008-06-13 22:44:01 +0200877.. automethod:: Environment.preprocess
878
Armin Ronacher5411ce72008-05-25 11:36:22 +0200879.. automethod:: Template.new_context
880
881.. method:: Template.root_render_func(context)
882
883 This is the low level render function. It's passed a :class:`Context`
884 that has to be created by :meth:`new_context` of the same template or
885 a compatible template. This render function is generated by the
886 compiler from the template code and returns a generator that yields
887 unicode strings.
888
889 If an exception in the template code happens the template engine will
890 not rewrite the exception but pass through the original one. As a
891 matter of fact this function should only be called from within a
892 :meth:`render` / :meth:`generate` / :meth:`stream` call.
893
894.. attribute:: Template.blocks
895
896 A dict of block render functions. Each of these functions works exactly
897 like the :meth:`root_render_func` with the same limitations.
898
899.. attribute:: Template.is_up_to_date
900
901 This attribute is `False` if there is a newer version of the template
902 available, otherwise `True`.
Armin Ronacher9bb7e472008-05-28 11:26:59 +0200903
904.. admonition:: Note
905
Armin Ronacher58f351d2008-05-28 21:30:14 +0200906 The low-level API is fragile. Future Jinja2 versions will try not to
907 change it in a backwards incompatible way but modifications in the Jinja2
908 core may shine through. For example if Jinja2 introduces a new AST node
909 in later versions that may be returned by :meth:`~Environment.parse`.
Armin Ronacher63cf9b82009-07-26 10:33:36 +0200910
911The Meta API
912------------
913
914.. versionadded:: 2.2
915
916The meta API returns some information about abstract syntax trees that
917could help applications to implement more advanced template concepts. All
918the functions of the meta API operate on an abstract syntax tree as
919returned by the :meth:`Environment.parse` method.
920
921.. autofunction:: jinja2.meta.find_undeclared_variables
922
923.. autofunction:: jinja2.meta.find_referenced_templates