===============================
Differences To Django Templates
===============================

If you have previously worked with Django templates, you should find Jinja very
familiar. In fact, most of the syntax elements look and work the same.

However, Jinja provides some more syntax elements covered in the documentation
and some work a bit different.

Method Calls
============

In Django method calls work implicitly. With Jinja you have to specify that you
want to call an object. Thus this Django code:

.. sourcecode:: django

    {% for page in user.get_created_pages %}
      ...
    {% endfor %}

will look like this in Jinja:

.. sourcecode:: jinja

    {% for page in user.get_created_pages() %}
      ...
    {% endfor %}

This allows you to pass variables to the function which is also used for
macros and loop recursion, both features that don't exist in Django.

Conditions
==========

In Django you can use the following constructs to check for equality:

.. sourcecode:: django

    {% ifequals foo "bar" %}
        ...
    {% else %}
        ...
    {% endifequals %}

In Jinja you can use the normal ``if`` statement in combination with
operators:

.. sourcecode:: jinja

    {% if foo == 'bar' %}
        ...
    {% else %}
        ...
    {% endif %}

You can also have multiple ``elif`` branches in your template:

.. sourcecode:: jinja

    {% if something %}
        ...
    {% elif otherthing %}
        ...
    {% elif foothing %}
        ...
    {% else %}
        ...
    {% endif %}

Filter Arguments
================

Jinja provides more than one argument for filters. Also the syntax for argument
passing is different. A template that looks like this in Django:

.. sourcecode:: django

    {{ items|join:", " }}

looks like this in jinja:

.. sourcecode:: jinja

    {{ items|join(', ') }}

In fact it's a bit more verbose but it allows different types of arguments - including
variables - and more than one of them.

Tests
=====

In addition to filters there also are tests you can perform using the `is` operator.
Here are some examples:

.. sourcecode:: jinja

    {% if user.user_id is odd %}
        {{ user.username|e }} is odd
    {% else %}
        hmm. {{ user.username|e }} looks pretty normal
    {% endif %}

For a list of supported tests head over to the `syntax reference`_.


.. _syntax reference: designerdoc.txt
