Skip to main content

jinja2_registry

https://img.shields.io/travis/3ptscience/jinja2-registry.svg MIT License https://img.shields.io/pypi/v/jinja2-registry.svg https://img.shields.io/pypi/pyversions/jinja2-registry.svg

jinja2_registry is a convenience library for managing multiple template namespaces with Jinja2

Example

The following Python code sets up a jinja2.Environment and three distinct jinja2.FileSystemLoader objects under a jinja2.PrefixLoader. It then renders a HTML page based on title.html that includes several other files.

from jinja2_registry import Renderer, register_filesystem_loader

register_filesystem_loader('layouts', 'templates/layouts')
register_filesystem_loader('partials', 'templates/partials')
register_filesystem_loader('pages', 'templates/pages')

renderer = Renderer('pages/title.html')
html = renderer.render()
print(html)

The result is rendered from 4 HTML templates, which are located in different directories. In this example, all of the templates are read from the filesystem; however, users may make use of register_loader to attach any standard Jinja2 loader to the registry.

Result

<!DOCTYPE html>
<html>
  <head>
    <title>new_title</title>
  </head>
  <body>
    <ul>
      <li><a href="/content">Content page</a></li>
      <li><a href="/title">New title page</a></li>
    </ul>
    <div>
      <p>some_content</p>
    </div>
  </body>
</html>

The HTML templates are organized into the following structure. Layouts are separated from partials and content. In a production deployment, layouts would likely be stored separately from pages (e.g., in a library), and partials might be automatically generated.

File structure:

templates/
├── layouts
│   └── base.html
├── pages
│   ├── content.html
│   └── title.html
└── partials
    └── nav.html

templates/layouts/base.html

<!DOCTYPE html>
<html>
  <head>
    <title>{% block title %}default_title{% endblock %}</title>
  </head>
  <body>
    {% include "partials/nav.html" %}
    <div>
      {% block content %}{% endblock %}
    </div>
  </body>
</html>

templates/partials/nav.html

<ul>
  <li><a href="/content">Content page</a></li>
  <li><a href="/title">New title page</a></li>
</ul>

templates/pages/content.html

{% extends "layouts/base.html" %}
{% block content %}
      <p>some_content</p>
{%- endblock %}

templates/pages/title.html

{% extends "pages/content.html" %}
{% block title %}new_title{% endblock %}

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

jinja2-registry-0.1.1.tar.gz (5.4 kB view details)

Uploaded Source

File details

Details for the file jinja2-registry-0.1.1.tar.gz.

File metadata

File hashes

Hashes for jinja2-registry-0.1.1.tar.gz
Algorithm Hash digest
SHA256 0556bd95e6cd7dfee8e26e426d78409a7b7d4120b2cc3e7fea0bbc3f6717120e
MD5 64fa039e016d2253fa158dbc57974e2e
BLAKE2b-256 a20cc216faa4027ebb8f355c3c4f951832ea55817f5cd2ac0ec6c1a7cc109806

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.1.1 This release

1 file

0.1.0

2 files

0.0.6

2 files

0.0.5

1 file

0.0.4

1 file

0.0.2

1 file

0.0.1

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page