summaryrefslogtreecommitdiff
path: root/docs/quick_tutorial/jinja2.rst
blob: bdca65e68ad3f4b29b62c364a6c1888f4d6861c6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
==============================
12: Templating With ``jinja2``
==============================

We just said Pyramid doesn't prefer one templating language over
another. Time to prove it. Jinja2 is a popular templating system,
used in Flask and modelled after Django's templates. Let's add
``pyramid_jinja2``, a Pyramid :term:`add-on` which enables Jinja2 as a
:term:`renderer` in our Pyramid applications.

Objectives
==========

- Show Pyramid's support for different templating systems

- Learn about installing Pyramid add-ons

Steps
=====

#. In this step let's start by installing the ``pyramid_jinja2``
   add-on, the copying the ``view_class`` step's directory:

   .. code-block:: bash

    (env)$ cd ..; cp -r view_classes jinja2; cd jinja2
    (env)$ python setup.py develop
    (env)$ easy_install pyramid_jinja2

#. We need to add an item to ``pyramid.includes`` in
   ``jinja2/development.ini``:

   .. literalinclude:: jinja2/development.ini
    :language: ini
    :linenos:

#. Our ``jinja2/tutorial/views.py`` simply changes its ``renderer``:

   .. literalinclude:: jinja2/tutorial/views.py
    :linenos:

#. Add ``jinja2/tutorial/home.jinja2`` as a template:

   .. literalinclude:: jinja2/tutorial/home.jinja2
    :language: html

#. Get the ``pyramid.includes`` into the functional test setup in
   ``jinja2/tutorial/tests.py``:

   .. literalinclude:: jinja2/tutorial/tests.py
    :linenos:

#. Now run the tests:

   .. code-block:: bash

    (env)$ nosetests tutorial

#. Run your Pyramid application with:

   .. code-block:: bash

    (env)$ pserve development.ini --reload

#. Open ``http://localhost:6543/`` in your browser.

Analysis
========

Getting a Pyramid add-on into Pyramid is simple. First you use normal
Python package installation tools to install the add-on package into
your Python. You then tell Pyramid's configurator to run the setup code
in the add-on. In this case the setup code told Pyramid to make a new
"renderer" available that looked for ``.jinja2`` file extensions.

Our view code stayed largely the same. We simply changed the file
extension on the renderer. For the template, the syntax for Chameleon
and Jinja2's basic variable insertion is very similar.

Our functional tests don't have ``development.ini`` so they needed the
``pyramid.includes`` to be setup in the test setup.

Extra Credit
============

#. Our project now depends on ``pyramid_jinja2``. We installed that
   dependency manually. What is another way we could have made the
   association?

#. We used ``development.ini`` to get the :term:`configurator` to
   load ``pyramid_jinja2``'s configuration. What is another way could
   include it into the config?

.. seealso:: `Jinja2 homepage <http://jinja.pocoo.org/>`_,
   and
   :ref:`pyramid_jinja2 Overview <jinja2:overview>`