blob: 5b9e5aded74a3b07df797a304ffd0844d9580a7b [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
Armin Ronacherd1ff8582008-05-11 00:30:43 +020071 see :ref:`writing-filters`. For valid filter names have a look at
72 :ref:`identifier-naming`.
Armin Ronacher3c8b7ad2008-04-28 13:52:21 +020073
74 .. attribute:: tests
75
Lukas Meuserad48a2e2008-05-01 18:19:57 +020076 A dict of test functions for this environment. As long as no
77 template was loaded it's safe to modify this dict. For custom tests
Armin Ronacherd1ff8582008-05-11 00:30:43 +020078 see :ref:`writing-tests`. For valid test names have a look at
79 :ref:`identifier-naming`.
Armin Ronacher3c8b7ad2008-04-28 13:52:21 +020080
81 .. attribute:: globals
82
83 A dict of global variables. These variables are always available
Armin Ronacher981cbf62008-05-13 09:12:27 +020084 in a template. As long as no template was loaded it's safe
Armin Ronacher7259c762008-04-30 13:03:59 +020085 to modify this dict. For more details see :ref:`global-namespace`.
Armin Ronacherd1ff8582008-05-11 00:30:43 +020086 For valid object names have a look at :ref:`identifier-naming`.
Armin Ronacher3c8b7ad2008-04-28 13:52:21 +020087
Armin Ronachered98cac2008-05-07 08:42:11 +020088 .. automethod:: overlay([options])
89
Armin Ronacher3c8b7ad2008-04-28 13:52:21 +020090
91.. autoclass:: jinja2.Template
Armin Ronachered98cac2008-05-07 08:42:11 +020092 :members: make_module, module, new_context
Armin Ronacher3c8b7ad2008-04-28 13:52:21 +020093
Armin Ronacher7259c762008-04-30 13:03:59 +020094 .. attribute:: globals
95
Armin Ronachered98cac2008-05-07 08:42:11 +020096 The dict with the globals of that template. It's unsafe to modify
97 this dict as it may be shared with other templates or the environment
98 that loaded the template.
Armin Ronacher7259c762008-04-30 13:03:59 +020099
100 .. attribute:: name
101
Armin Ronachered98cac2008-05-07 08:42:11 +0200102 The loading name of the template. If the template was loaded from a
103 string this is `None`.
104
105 .. automethod:: render([context])
106
107 .. automethod:: generate([context])
108
109 .. automethod:: stream([context])
Armin Ronacher7259c762008-04-30 13:03:59 +0200110
Armin Ronacher3c8b7ad2008-04-28 13:52:21 +0200111
112.. autoclass:: jinja2.environment.TemplateStream
113 :members: disable_buffering, enable_buffering
114
115
Armin Ronacherd1ff8582008-05-11 00:30:43 +0200116.. _identifier-naming:
117
118Notes on Identifiers
119~~~~~~~~~~~~~~~~~~~~
120
121Jinja2 uses the regular Python 2.x naming rules. Valid identifiers have to
122match ``[a-zA-Z_][a-zA-Z0-9_]*``. As a matter of fact non ASCII characters
123are currently not allowed. This limitation will probably go away as soon as
124unicode identifiers are fully specified for Python 3.
125
126Filters and tests are looked up in separate namespaces and have slightly
127modified identifier syntax. Filters and tests may contain dots to group
128filters and tests by topic. For example it's perfectly valid to add a
129function into the filter dict and call it `to.unicode`. The regular
130expression for filter and test identifiers is
131``[a-zA-Z_][a-zA-Z0-9_]*(\.[a-zA-Z_][a-zA-Z0-9_]*)*```.
132
133
Armin Ronacher3c8b7ad2008-04-28 13:52:21 +0200134Undefined Types
135---------------
136
137These classes can be used as undefined types. The :class:`Environment`
138constructor takes an `undefined` parameter that can be one of those classes
139or a custom subclass of :class:`Undefined`. Whenever the template engine is
140unable to look up a name or access an attribute one of those objects is
141created and returned. Some operations on undefined values are then allowed,
142others fail.
143
144The closest to regular Python behavior is the `StrictUndefined` which
145disallows all operations beside testing if it's an undefined object.
146
147.. autoclass:: jinja2.runtime.Undefined
148
149.. autoclass:: jinja2.runtime.DebugUndefined
150
151.. autoclass:: jinja2.runtime.StrictUndefined
152
153
Armin Ronacher7259c762008-04-30 13:03:59 +0200154The Context
155-----------
156
Armin Ronacher19cf9c22008-05-01 12:49:53 +0200157.. autoclass:: jinja2.runtime.Context
Armin Ronacherf35e2812008-05-06 16:04:10 +0200158 :members: resolve, get_exported, get_all
Armin Ronacher7259c762008-04-30 13:03:59 +0200159
160 .. attribute:: parent
161
162 A dict of read only, global variables the template looks up. These
Armin Ronacher19cf9c22008-05-01 12:49:53 +0200163 can either come from another :class:`Context`, from the
Armin Ronacher7259c762008-04-30 13:03:59 +0200164 :attr:`Environment.globals` or :attr:`Template.globals`. It must not
165 be altered.
166
167 .. attribute:: vars
168
169 The template local variables. This list contains environment and
170 context functions from the :attr:`parent` scope as well as local
171 modifications and exported variables from the template. The template
172 will modify this dict during template evaluation but filters and
173 context functions are not allowed to modify it.
174
175 .. attribute:: environment
176
177 The environment that loaded the template.
178
179 .. attribute:: exported_vars
180
181 This set contains all the names the template exports. The values for
182 the names are in the :attr:`vars` dict. In order to get a copy of the
183 exported variables as dict, :meth:`get_exported` can be used.
184
185 .. attribute:: name
186
187 The load name of the template owning this context.
188
189 .. attribute:: blocks
190
191 A dict with the current mapping of blocks in the template. The keys
192 in this dict are the names of the blocks, and the values a list of
193 blocks registered. The last item in each list is the current active
194 block (latest in the inheritance chain).
195
196
Armin Ronacher5cdc1ac2008-05-07 12:17:18 +0200197.. _loaders:
198
Armin Ronacher3c8b7ad2008-04-28 13:52:21 +0200199Loaders
200-------
201
202Loaders are responsible for loading templates from a resource such as the
Armin Ronacher7259c762008-04-30 13:03:59 +0200203file system. The environment will keep the compiled modules in memory like
204Python's `sys.modules`. Unlike `sys.modules` however this cache is limited in
205size by default and templates are automatically reloaded.
Armin Ronachercda43df2008-05-03 17:10:05 +0200206All loaders are subclasses of :class:`BaseLoader`. If you want to create your
Armin Ronachercda43df2008-05-03 17:10:05 +0200207own loader, subclass :class:`BaseLoader` and override `get_source`.
208
209.. autoclass:: jinja2.loaders.BaseLoader
210 :members: get_source, load
211
212Here a list of the builtin loaders Jinja2 provides:
Armin Ronacher3c8b7ad2008-04-28 13:52:21 +0200213
214.. autoclass:: jinja2.loaders.FileSystemLoader
215
216.. autoclass:: jinja2.loaders.PackageLoader
217
218.. autoclass:: jinja2.loaders.DictLoader
219
220.. autoclass:: jinja2.loaders.FunctionLoader
221
222.. autoclass:: jinja2.loaders.PrefixLoader
223
224.. autoclass:: jinja2.loaders.ChoiceLoader
225
Armin Ronacher3c8b7ad2008-04-28 13:52:21 +0200226
227Utilities
228---------
229
230These helper functions and classes are useful if you add custom filters or
231functions to a Jinja2 environment.
232
233.. autofunction:: jinja2.filters.environmentfilter
234
235.. autofunction:: jinja2.filters.contextfilter
236
237.. autofunction:: jinja2.utils.environmentfunction
238
239.. autofunction:: jinja2.utils.contextfunction
240
241.. function:: escape(s)
242
243 Convert the characters &, <, >, and " in string s to HTML-safe sequences.
244 Use this if you need to display text that might contain such characters
245 in HTML. This function will not escaped objects that do have an HTML
246 representation such as already escaped data.
247
Armin Ronacher187bde12008-05-01 18:19:16 +0200248.. autofunction:: jinja2.utils.clear_caches
249
Armin Ronacher3c8b7ad2008-04-28 13:52:21 +0200250.. autoclass:: jinja2.utils.Markup
251
252
253Exceptions
254----------
255
Armin Ronacher5cdc1ac2008-05-07 12:17:18 +0200256.. autoexception:: jinja2.exceptions.TemplateError
Armin Ronacher3c8b7ad2008-04-28 13:52:21 +0200257
Armin Ronacher5cdc1ac2008-05-07 12:17:18 +0200258.. autoexception:: jinja2.exceptions.UndefinedError
Armin Ronacher3c8b7ad2008-04-28 13:52:21 +0200259
Armin Ronacher5cdc1ac2008-05-07 12:17:18 +0200260.. autoexception:: jinja2.exceptions.TemplateNotFound
Armin Ronacher3c8b7ad2008-04-28 13:52:21 +0200261
Armin Ronacher5cdc1ac2008-05-07 12:17:18 +0200262.. autoexception:: jinja2.exceptions.TemplateSyntaxError
Armin Ronacher3c8b7ad2008-04-28 13:52:21 +0200263
Armin Ronacher5cdc1ac2008-05-07 12:17:18 +0200264.. autoexception:: jinja2.exceptions.TemplateAssertionError
Armin Ronacher7259c762008-04-30 13:03:59 +0200265
266
267.. _writing-filters:
268
269Custom Filters
270--------------
271
272Custom filters are just regular Python functions that take the left side of
273the filter as first argument and the the arguments passed to the filter as
274extra arguments or keyword arguments.
275
276For example in the filter ``{{ 42|myfilter(23) }}`` the function would be
277called with ``myfilter(42, 23)``. Here for example a simple filter that can
278be applied to datetime objects to format them::
279
280 def datetimeformat(value, format='%H:%M / %d-%m-%Y'):
281 return value.strftime(format)
282
283You can register it on the template environment by updating the
284:attr:`~Environment.filters` dict on the environment::
285
286 environment.filters['datetimeformat'] = datetimeformat
287
288Inside the template it can then be used as follows:
289
290.. sourcecode:: jinja
291
292 written on: {{ article.pub_date|datetimeformat }}
293 publication date: {{ article.pub_date|datetimeformat('%d-%m-%Y') }}
294
295Filters can also be passed the current template context or environment. This
296is useful if a filters wants to return an undefined value or check the current
297:attr:`~Environment.autoescape` setting. For this purpose two decorators
298exist: :func:`environmentfilter` and :func:`contextfilter`.
299
300Here a small example filter that breaks a text into HTML line breaks and
301paragraphs and marks the return value as safe HTML string if autoescaping is
302enabled::
303
304 import re
305 from jinja2 import environmentfilter, Markup, escape
306
307 _paragraph_re = re.compile(r'(?:\r\n|\r|\n){2,}')
308
309 @environmentfilter
310 def nl2br(environment, value):
311 result = u'\n\n'.join(u'<p>%s</p>' % p.replace('\n', '<br>\n')
312 for p in _paragraph_re.split(escape(value)))
313 if environment.autoescape:
314 result = Markup(result)
315 return result
316
317Context filters work the same just that the first argument is the current
Armin Ronacher19cf9c22008-05-01 12:49:53 +0200318active :class:`Context` rather then the environment.
Armin Ronacher7259c762008-04-30 13:03:59 +0200319
320
321.. _writing-tests:
322
323Custom Tests
324------------
325
326Tests work like filters just that there is no way for a filter to get access
327to the environment or context and that they can't be chained. The return
328value of a filter should be `True` or `False`. The purpose of a filter is to
329give the template designers the possibility to perform type and conformability
330checks.
331
332Here a simple filter that checks if a variable is a prime number::
333
334 import math
335
336 def is_prime(n):
337 if n == 2:
338 return True
339 for i in xrange(2, int(math.ceil(math.sqrt(n))) + 1):
340 if n % i == 0:
341 return False
342 return True
343
344
345You can register it on the template environment by updating the
346:attr:`~Environment.tests` dict on the environment::
347
348 environment.tests['prime'] = is_prime
349
350A template designer can then use the test like this:
351
352.. sourcecode:: jinja
353
354 {% if 42 is prime %}
355 42 is a prime number
356 {% else %}
357 42 is not a prime number
358 {% endif %}
359
360
361.. _global-namespace:
362
363The Global Namespace
364--------------------
365
Armin Ronacher981cbf62008-05-13 09:12:27 +0200366Variables stored in the :attr:`Environment.globals` dict are special as they
367are available for imported templates too, even if they are imported without
368context. This is the place where you can put variables and functions
369that should be available all the time. Additionally :attr:`Template.globals`
370exist that are variables available to a specific template that are available
371to all :meth:`~Template.render` calls.