1 # -*- coding: utf-8 -*-
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.
13 Here a small example of a Jinja template::
15 {% extends 'base.html' %}
16 {% block title %}Memberlist{% endblock %}
19 {% for user in users %}
20 <li><a href="{{ user.url }}">{{ user.username }}</a></li>
28 Application logic is for the controller but don't try to make the life
29 for the template designer too hard by giving him too few functionality.
31 For more informations visit the new `jinja2 webpage`_ and `documentation`_.
33 The `Jinja2 tip`_ is installable via `easy_install` with ``easy_install
36 .. _sandboxed: http://en.wikipedia.org/wiki/Sandbox_(computer_security)
37 .. _Django: http://www.djangoproject.com/
38 .. _jinja webpage: http://jinja2.pocoo.org/
39 .. _documentation: http://jinja2.pocoo.org/documentation/index.html
40 .. _Jinja tip: http://dev.pocoo.org/hg/jinja2-main/archive/tip.tar.gz#egg=Jinja2-dev
45 ez_setup.use_setuptools()
47 from setuptools import setup, Extension, Feature
48 from distutils.command.build_ext import build_ext
49 from distutils.errors import CCompilerError, DistutilsPlatformError
53 documentation_path = 'docs/_build/html'
54 if os.path.exists(documentation_path):
55 documentation_files = []
56 for fn in os.listdir(documentation_path):
57 if not fn.startswith('.'):
58 fn = os.path.join(documentation_path, fn)
59 if os.path.isfile(fn):
60 documentation_files.append(fn)
61 data_files.append(('docs', documentation_files))
64 def get_terminal_width():
65 """Return the current terminal dimensions."""
67 from struct import pack, unpack
68 from fcntl import ioctl
69 from termios import TIOCGWINSZ
70 s = pack('HHHH', 0, 0, 0, 0)
71 return unpack('HHHH', ioctl(sys.stdout.fileno(), TIOCGWINSZ, s))[1]
76 class optional_build_ext(build_ext):
77 """This class allows C extension building to fail."""
82 except DistutilsPlatformError:
85 def build_extension(self, ext):
87 build_ext.build_extension(self, ext)
88 except CCompilerError, x:
91 def _unavailable(self):
92 width = get_terminal_width()
95 An optional C extension could not be compiled, speedups will not be
102 url='http://jinja.pocoo.org/',
104 author='Armin Ronacher',
105 author_email='armin.ronacher@active-4.com',
106 description='A small but fast and easy to use stand-alone template '
107 'engine written in pure python.',
108 long_description=__doc__,
109 # jinja is egg safe. But because we distribute the documentation
110 # in form of html and txt files it's a better idea to extract the files
113 'Development Status :: 4 Beta',
114 'Environment :: Web Environment',
115 'Intended Audience :: Developers',
116 'License :: OSI Approved :: BSD License',
117 'Operating System :: OS Independent',
118 'Programming Language :: Python',
119 'Topic :: Internet :: WWW/HTTP :: Dynamic Content',
120 'Topic :: Software Development :: Libraries :: Python Modules',
121 'Topic :: Text Processing :: Markup :: HTML'
124 data_files=data_files,
126 'speedups': Feature("optional C speed-enhancements",
129 Extension('jinja2._speedups', ['jinja2/_speedups.c'])
133 extras_require={'i18n': ['Babel>=0.8']},
136 jinja2 = jinja2.ext:babel_extract[i18n]