Armin Ronacher | 92f572f | 2007-02-26 22:17:32 +0100 | [diff] [blame] | 1 | # -*- coding: utf-8 -*- |
| 2 | """ |
Armin Ronacher | 07bc684 | 2008-03-31 14:18:49 +0200 | [diff] [blame] | 3 | jinja2 |
| 4 | ~~~~~~ |
Armin Ronacher | ae16fd0 | 2007-03-27 21:31:24 +0200 | [diff] [blame] | 5 | |
Armin Ronacher | 203bfcb | 2008-04-24 21:54:44 +0200 | [diff] [blame] | 6 | Jinja2 is a template engine written in pure Python. It provides a |
| 7 | Django inspired non-XML syntax but supports inline expressions and |
| 8 | an optional sandboxed environment. |
Armin Ronacher | ae16fd0 | 2007-03-27 21:31:24 +0200 | [diff] [blame] | 9 | |
| 10 | Nutshell |
| 11 | -------- |
| 12 | |
Armin Ronacher | 203bfcb | 2008-04-24 21:54:44 +0200 | [diff] [blame] | 13 | Here a small example of a Jinja2 template:: |
Armin Ronacher | ae16fd0 | 2007-03-27 21:31:24 +0200 | [diff] [blame] | 14 | |
| 15 | {% extends 'base.html' %} |
| 16 | {% block title %}Memberlist{% endblock %} |
| 17 | {% block content %} |
| 18 | <ul> |
| 19 | {% for user in users %} |
Armin Ronacher | 203bfcb | 2008-04-24 21:54:44 +0200 | [diff] [blame] | 20 | <li><a href="{{ user.url }}">{{ user.username }}</a></li> |
Armin Ronacher | ae16fd0 | 2007-03-27 21:31:24 +0200 | [diff] [blame] | 21 | {% endfor %} |
| 22 | </ul> |
| 23 | {% endblock %} |
| 24 | |
Armin Ronacher | ae16fd0 | 2007-03-27 21:31:24 +0200 | [diff] [blame] | 25 | |
Armin Ronacher | 203bfcb | 2008-04-24 21:54:44 +0200 | [diff] [blame] | 26 | :copyright: 2008 by Armin Ronacher, Christoph Hack. |
Armin Ronacher | 92f572f | 2007-02-26 22:17:32 +0100 | [diff] [blame] | 27 | :license: BSD, see LICENSE for more details. |
| 28 | """ |
Armin Ronacher | 203bfcb | 2008-04-24 21:54:44 +0200 | [diff] [blame] | 29 | __docformat__ = 'restructuredtext en' |
| 30 | try: |
| 31 | __version__ = __import__('pkg_resources') \ |
| 32 | .get_distribution('Jinja2').version |
| 33 | except: |
| 34 | __version__ = 'unknown' |
| 35 | |
| 36 | # high level interface |
| 37 | from jinja2.environment import Environment, Template |
| 38 | |
| 39 | # loaders |
Armin Ronacher | 9a82205 | 2008-04-17 18:44:07 +0200 | [diff] [blame] | 40 | from jinja2.loaders import BaseLoader, FileSystemLoader, PackageLoader, \ |
Armin Ronacher | 203bfcb | 2008-04-24 21:54:44 +0200 | [diff] [blame] | 41 | DictLoader, FunctionLoader, PrefixLoader, ChoiceLoader |
| 42 | |
| 43 | # undefined types |
Armin Ronacher | c63243e | 2008-04-14 22:53:58 +0200 | [diff] [blame] | 44 | from jinja2.runtime import Undefined, DebugUndefined, StrictUndefined |
Armin Ronacher | 203bfcb | 2008-04-24 21:54:44 +0200 | [diff] [blame] | 45 | |
Armin Ronacher | d134231 | 2008-04-28 12:20:12 +0200 | [diff] [blame^] | 46 | # exceptions |
| 47 | from jinja2.exceptions import TemplateError, UndefinedError, \ |
| 48 | TemplateNotFound, TemplateSyntaxError, TemplateAssertionError |
| 49 | |
Armin Ronacher | 203bfcb | 2008-04-24 21:54:44 +0200 | [diff] [blame] | 50 | # decorators and public utilities |
Armin Ronacher | f59bac2 | 2008-04-20 13:11:43 +0200 | [diff] [blame] | 51 | from jinja2.filters import environmentfilter, contextfilter |
Armin Ronacher | 203bfcb | 2008-04-24 21:54:44 +0200 | [diff] [blame] | 52 | from jinja2.utils import Markup, escape, environmentfunction, contextfunction |