<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
  <head>
    <title>Jinja2 Documentation</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <link rel="stylesheet" href="{{ pathto('_static/style.css', 1) }}" type="text/css">
    <link rel="stylesheet" href="{{ pathto('_static/print.css', 1) }}" type="text/css" media="print">
    <link rel="stylesheet" href="{{ pathto('_static/pygments.css', 1) }}" type="text/css">
    {%- if builder != 'htmlhelp' %}
    <script type="text/javascript">
      var DOCUMENTATION_OPTIONS = {
        URL_ROOT:   '{{ pathto("", 1) }}',
        VERSION:    '{{ release }}'
      };
    </script>
    <script type="text/javascript" src="{{ pathto('_static/jquery.js', 1) }}"></script>
    <script type="text/javascript" src="{{ pathto('_static/interface.js', 1) }}"></script>
    <script type="text/javascript" src="{{ pathto('_static/doctools.js', 1) }}"></script>
    <script type="text/javascript" src="{{ pathto('_static/jinja.js', 1) }}"></script>
    {%- endif %}
    {%- if use_opensearch and builder != 'htmlhelp' %}
    <link rel="search" type="application/opensearchdescription+xml"
          title="Search within {{ docstitle }}"
          href="{{ pathto('_static/opensearch.xml', 1) }}">
    {%- endif %}
    {%- if hasdoc('about') %}
    <link rel="author" title="About these documents" href="{{ pathto('about') }}">
    {%- endif %}
    <link rel="contents" title="Global table of contents" href="{{ pathto('contents') }}">
    <link rel="index" title="Global index" href="{{ pathto('genindex') }}">
    <link rel="search" title="Search" href="{{ pathto('search') }}">
    {%- if hasdoc('copyright') %}
    <link rel="copyright" title="Copyright" href="{{ pathto('copyright') }}">
    {%- endif %}
    <link rel="top" title="{{ docstitle }}" href="{{ pathto('index') }}">
    {%- if parents %}
    <link rel="up" title="{{ parents[-1].title|striptags }}" href="{{ parents[-1].link|e }}">
    {%- endif %}
    {%- if next %}
    <link rel="next" title="{{ next.title|striptags }}" href="{{ next.link|e }}">
    {%- endif %}
    {%- if prev %}
    <link rel="prev" title="{{ prev.title|striptags }}" href="{{ prev.link|e }}">
    {%- endif %}
    {% block extrahead %}{% endblock %}
  </head>
  <body>
    <div id="content">
      <div class="header">
        <h1 class="heading"><a href="{{ pathto('index') }}"
          title="back to the documentation overview"><span>Jinja</span></a></h1>
      </div>
      <div class="relnav">
        {%- if prev %}
        <a href="{{ prev.link|e }}">&laquo; {{ prev.title }}</a> |
        {%- endif %}
        <a href="{{ pathto(current_page_name) if current_page_name else '#' }}">{{ title }}</a>
        {%- if next %}
        | <a href="{{ next.link|e }}">{{ next.title }} &raquo;</a>
        {%- endif %}
      </div>
      <div id="contentwrapper">
        {%- if display_toc %}
        <div id="toc">
          <h3>Table Of Contents</h3>
          {{ toc }}
        </div>
        {%- endif %}
        {% block body %}{% endblock %}
      </div>
    </div>
    <div class="footer">
      © Copyright 2010 by the <a href="http://pocoo.org/">Pocoo Team</a>,
      documentation generated by <a href="http://sphinx.pocoo.org/">Sphinx</a>
    </div>
  </body>
</html>
