Skip to main content

Render Jinja2 template block as HTML page fragments on Python web frameworks.

Project description

Jinja2 fragments

Jinja2 Fragments allows rendering blocks from Jinja2 templates. This library was created to enable the pattern of Template Fragments with Jinja2. It's a great pattern if you are using HTMX or some other library that leverages fetching partial HTML.

With jinja2. if you have a template block that you want to render by itself and as part of another page, you are forced to put that block on a separate file and then use the include tag (or Jinja Partials) on the wrapping template.

With Jinja2 Fragments, following the Locality of Behavior design principle you have a single file for both cases. See below for examples.

Install

It's just pip install jinja2-fragments and you're all set. It's a pure Python package that only needs jinja2 (for obvious reasons!).

Usage

This is an example of how to use the library with vanilla Jinja2. Given the template page.html.jinja2:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>This is the title</title>
</head>
<body>
    <h1>This is a header</h1>
    {% block content %}
    <p>This is the magic number: {{ magic_number }}.</p>
    {% endblock %}
</body>
</html>

If you want to render only the content block, do:

from jinja2 import Environment, FileSystemLoader, select_autoescape
from jinja2_fragments import render_block

environment = Environment(
    loader=FileSystemLoader("my_templates"), 
    autoescape=select_autoescape(("html", "jinja2"))
)
rendered_html = render_block(
    environment, "page.html.jinja2", "content", magic_number=42
)

And this will only render:

<p>This is the magic number: 42.</p>

Usage with Flask

If you want to use Jinja2 Fragments with Flask, assuming the same template as the example above, do:

from flask import Flask, render_template
from jinja2_fragments.flask import render_block

app = Flask(__name__)

@app.get("/full_page")
def full_page():
    return render_template("page.html.jinja2", magic_number=42)


@app.get("/only_content")
def only_content():
    return render_block("page.html.jinja2", "content", magic_number=42)

Project details


Download files

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

Source Distribution

jinja2_fragments-0.1.0.tar.gz (4.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

jinja2_fragments-0.1.0-py3-none-any.whl (4.9 kB view details)

Uploaded Python 3

File details

Details for the file jinja2_fragments-0.1.0.tar.gz.

File metadata

  • Download URL: jinja2_fragments-0.1.0.tar.gz
  • Upload date:
  • Size: 4.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.10.6

File hashes

Hashes for jinja2_fragments-0.1.0.tar.gz
Algorithm Hash digest
SHA256 81e6136601dc58d8f3d6d02717942e1fa9b41fb32a0afb480cc3a30c1c1cbd39
MD5 924b170bda5ebeef7b7157777c151840
BLAKE2b-256 1a42432d5d5e2d3c53c556fbdd0db1830362d9da5737c84ee8d9f962ec7b031e

See more details on using hashes here.

File details

Details for the file jinja2_fragments-0.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for jinja2_fragments-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 9a930d0b72718f10779dc3386c1c1b2667bb54699d1a1840787d290d716b4508
MD5 17350b10f343878022c21044c4569caa
BLAKE2b-256 0f44434702f02a24c9a11fb5fd75530649175ff9c168975a207d3232efbb1218

See more details on using hashes here.

Supported by

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