blob: f8438342a87d9dcb014cb2229b4b079905f734db [file] [log] [blame]
====================
Developer Quickstart
====================
This part of the documentation shows you how to embed Jinja into your
application.
Starting Up
===========
Here the quickest way to create a template from a string and render it:
.. sourcecode:: python
from jinja import Environment
env = Environment()
tmpl = env.from_string('Hello {{ name }}!')
print tmpl.render(name='John Doe')
This example should output the following string after execution::
Hello John Doe!
If you receive an error, check if you have a typo in your code. If not, have
a look at the `installation`_ page for troubleshooting.
The Environment
===============
The core component of Jinja is the `Environment`. It contains important shared
variables like configuration, filters, tests, globals and other stuff.
Here the possible initialization parameters:
========================= ==================================================
`block_start_string` * the string marking the begin of a block. this
defaults to ``'{%'``.
`block_end_string` * the string marking the end of a block. defaults
to ``'%}'``.
`variable_start_string` * the string marking the begin of a print
statement. defaults to ``'{{'``.
`comment_start_string` * the string marking the begin of a
comment. defaults to ``'{#'``.
`comment_end_string` * the string marking the end of a comment.
defaults to ``'#}'``.
`trim_blocks` * If this is set to ``True`` the first newline
after a block is removed (block, not
variable tag!). Defaults to ``False``.
`auto_escape` If this is set to ``True`` Jinja will
automatically escape all variables using xml
escaping methods. If you don't want to escape a
string you have to wrap it in a ``Markup``
object from the ``jinja.datastructure`` module.
`template_charset` The charset of the templates. Defaults
to ``'utf-8'``.
`charset` Charset of all string input data. Defaults
to ``'utf-8'``.
`namespace` Global namespace for all templates.
`loader` Specify a template loader.
`filters` dict of filters or the default filters if not
defined.
`tests` dict of tests of the default tests if not defined.
`context_class` the context class this template should use. See
the `context documentation`_ for more details.
========================= ==================================================
All of these variables except those marked with a star (*) are modifiable after
environment initialization.
The environment provides the following useful functions and properties in
addition to the initialization values:
=========================== ==================================================
``parse(source, filename)`` Parse the sourcecode and return the abstract
syntax tree. This tree of nodes is used by the
`translators`_ to convert the template into
executable source- or bytecode.
``from_string(source)`` Load and parse a template source and translate it
into eval-able Python code. This code is wrapped
within a `Template` class that allows you to
render it.
``get_template(name)`` Load a template from a loader. If the template
does not exist, you will get a `TemplateNotFound`
exception.
=========================== ==================================================
There are also some internal functions on the environment used by the template
evaluation code to keep it sandboxed.
Loading Templates From Files
============================
Loading templates from a string is always a bad idea. It doesn't allow template
inheritance and is also slow since it parses and compiles the template again
and again whereas loaders can cache the template code.
All you have to do is to define a loader and use the `get_template` function.
.. sourcecode:: python
from jinja import Environment, FileSystemLoader
env = Environment(loader=FileSystemLoader('templates'))
tmpl = env.get_template('index.html')
print tmpl.render(name='John Doe')
This tells jinja to look for templates in the ``templates`` folder. It's a
better idea to use an absolute path here though. For a list of supported
loaders or how to write your own, head over to the `loader`_ documentation.
Adding Filters
==============
If you want to add additional filters to the environment, the best way is to
modify the ``filters`` attribute and not to pass a dict to the environment.
If you pass it a dict it will not include the default filters!
.. sourcecode:: python
from mylib import my_cool_filter
env.filters['mycoolfilter'] = my_cool_filter
Writing filter functions is explained in the `filter development`_ section.
Adding Tests
============
Adding additional tests works analogous to filters:
.. sourcecode:: python
from mylib import my_cool_test
env.tests['mycooltest'] = my_cool_test
Writing tests is explained in the `test development`_ section.
.. _installation: installation.txt
.. _context documentation: contextenv.txt
.. _translators: translators.txt
.. _loader: loaders.txt
.. _filter development: filters.txt
.. _test development: tests.txt