blob: a412740b5faea925160b2a0b4d60a1191fa22e37 [file] [log] [blame]
Armin Ronacher3c8b7ad2008-04-28 13:52:21 +02001Introduction
2============
3
4This is the documentation for the Jinja2 general purpose templating language.
5Jinja2 is a library for Python 2.4 and onwards that is designed to be flexible,
6fast and secure.
7
8If you have any exposure to other text-based template languages, such as Smarty or
9Django, you should feel right at home with Jinja2. It's both designer and
10developer friendly by sticking to Python's principles and adding functionality
11useful for templating environments.
12
13The key-features are...
14
15- ... **configurable syntax**. If you are generating LaTeX or other formats
Armin Ronachered98cac2008-05-07 08:42:11 +020016 with Jinja2 you can change the delimiters to something that integrates better
Armin Ronacher3c8b7ad2008-04-28 13:52:21 +020017 into the LaTeX markup.
18
19- ... **fast**. While performance is not the primarily target of Jinja2 it's
20 surprisingly fast. The overhead compared to regular Python code was reduced
21 to the very minimum.
22
23- ... **easy to debug**. Jinja2 integrates directly into the python traceback
Armin Ronachered98cac2008-05-07 08:42:11 +020024 system which allows you to debug Jinja2 templates with regular python
Armin Ronacher3c8b7ad2008-04-28 13:52:21 +020025 debugging helpers.
26
27- ... **secure**. It's possible to evaluate untrusted template code if the
28 optional sandbox is enabled. This allows Jinja2 to be used as templating
29 language for applications where users may modify the template design.
30
31
32Prerequisites
33-------------
34
35Jinja2 needs at least **Python 2.4** to run. Additionally a working C-compiler
36that can create python extensions should be installed for the debugger. If no
Armin Ronacher61a5a242008-05-26 12:07:44 +020037C-compiler is available and you are using Python 2.4 the `ctypes`_ module
38should be installed.
Armin Ronacher3c8b7ad2008-04-28 13:52:21 +020039
Armin Ronacher56d01072008-11-23 13:25:51 +010040If you don't have a working C compiler and you are trying to install the source
41release you will get a compiler error. This however can be circumvented by
Armin Ronacher86b5cb52009-09-13 00:23:27 -070042passing the ``--without-speedups`` command line argument to the setup script::
43
44 $ python setup.py install --without-speedups
Armin Ronacher56d01072008-11-23 13:25:51 +010045
46For more details about that have a look at the :ref:`disable-speedups`
47section below.
48
Armin Ronacher3c8b7ad2008-04-28 13:52:21 +020049.. _ctypes: http://python.net/crew/theller/ctypes/
50
51
Armin Ronachered98cac2008-05-07 08:42:11 +020052Installation
53------------
54
55You have multiple ways to install Jinja2. If you are unsure what to do, go
56with the Python egg or tarball.
57
58As a Python egg (via easy_install)
59~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
60
Armin Ronacher56d01072008-11-23 13:25:51 +010061You can install the most recent Jinja2 version using `easy_install`_ or `pip`_::
Armin Ronachered98cac2008-05-07 08:42:11 +020062
Armin Ronacher86b5cb52009-09-13 00:23:27 -070063 easy_install Jinja2
64 pip install Jinja2
Armin Ronachered98cac2008-05-07 08:42:11 +020065
66This will install a Jinja2 egg in your Python installation's site-packages
67directory.
68
Armin Ronacher56d01072008-11-23 13:25:51 +010069(If you are installing from the windows command line omit the `sudo` and make
70sure to run the command as user with administrator rights)
71
Armin Ronachered98cac2008-05-07 08:42:11 +020072From the tarball release
73~~~~~~~~~~~~~~~~~~~~~~~~~
74
751. Download the most recent tarball from the `download page`_
762. Unpack the tarball
773. ``sudo python setup.py install``
78
79Note that the last command will automatically download and install
80`setuptools`_ if you don't already have it installed. This requires a working
81internet connection.
82
83This will install Jinja2 into your Python installation's site-packages directory.
84
85Installing the development version
86~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
87
881. Install `mercurial`_
Armin Ronacherbbbe0622008-05-19 00:23:37 +0200892. ``hg clone http://dev.pocoo.org/hg/jinja2-main jinja2``
Armin Ronachered98cac2008-05-07 08:42:11 +0200903. ``cd jinja2``
914. ``ln -s jinja2 /usr/lib/python2.X/site-packages``
92
93As an alternative to steps 4 you can also do ``python setup.py develop``
94which will install the package via setuptools in development mode. This also
95has the advantage that the C extensions are compiled.
96
97Alternative you can use `easy_install`_ to install the current development
98snapshot::
99
100 sudo easy_install Jinja2==dev
101
Armin Ronacher56d01072008-11-23 13:25:51 +0100102Or the new `pip`_ command::
103
104 sudo pip install Jinja2==dev
105
Armin Ronacher0aa0f582009-03-18 01:01:36 +0100106.. _download page: http://pypi.python.org/pypi/Jinja2
Armin Ronachered98cac2008-05-07 08:42:11 +0200107.. _setuptools: http://peak.telecommunity.com/DevCenter/setuptools
108.. _easy_install: http://peak.telecommunity.com/DevCenter/EasyInstall
Armin Ronacher56d01072008-11-23 13:25:51 +0100109.. _pip: http://pypi.python.org/pypi/pip
Armin Ronachered98cac2008-05-07 08:42:11 +0200110.. _mercurial: http://www.selenic.com/mercurial/
111
Armin Ronacher56d01072008-11-23 13:25:51 +0100112.. _disable-speedups:
113
114Disable the speedups Module
115~~~~~~~~~~~~~~~~~~~~~~~~~~~
116
117By default Jinja2 will try to compile the speedups module. This of course
118will fail if you don't have the Python headers or a working compiler. This
119is often the case if you are installing Jinja2 from a windows machine.
120
121You can disable the speedups extension when installing using the
122``--without-speedups`` flag::
123
124 sudo python setup.py install --without-speedups
125
Armin Ronacher86b5cb52009-09-13 00:23:27 -0700126You can also pass this parameter to `pip`::
127
128 $ pip install --install-option='--without-speedups' Jinja2
Armin Ronacher56d01072008-11-23 13:25:51 +0100129
Armin Ronachered98cac2008-05-07 08:42:11 +0200130
Armin Ronacher3c8b7ad2008-04-28 13:52:21 +0200131Basic API Usage
132---------------
133
Armin Ronacher4dcc2372008-05-26 13:59:26 +0200134This section gives you a brief introduction to the Python API for Jinja2
135templates.
Armin Ronacher3c8b7ad2008-04-28 13:52:21 +0200136
137The most basic way to create a template and render it is through
Armin Ronacher4dcc2372008-05-26 13:59:26 +0200138:class:`~jinja2.Template`. This however is not the recommended way to
139work with it if your templates are not loaded from strings but the file
140system or another data source:
Armin Ronacher3c8b7ad2008-04-28 13:52:21 +0200141
142>>> from jinja2 import Template
143>>> template = Template('Hello {{ name }}!')
144>>> template.render(name='John Doe')
145u'Hello John Doe!'
146
Armin Ronacher4dcc2372008-05-26 13:59:26 +0200147By creating an instance of :class:`~jinja2.Template` you get back a new template
148object that provides a method called :meth:`~jinja2.Template.render` which when
Armin Ronacher3c8b7ad2008-04-28 13:52:21 +0200149called with a dict or keyword arguments expands the template. The dict
150or keywords arguments passed to the template are the so-called "context"
151of the template.
Armin Ronacher61a5a242008-05-26 12:07:44 +0200152
153What you can see here is that Jinja2 is using unicode internally and the
154return value is an unicode string. So make sure that your application is
155indeed using unicode internally.