Simple reuse of partial HTML page templates in the Jinja template language for Python web frameworks.
Project description
Jinja Partials
Simple reuse of partial HTML page templates in the Jinja template language for Python web frameworks.
Overview
When building real-world web apps with Flask + Jinja2, it's easy to end up with repeated HTML fragments. Just like organizing code for reuse, it would be ideal to reuse smaller sections of HTML template code. That's what this library is all about.
Example
This project comes with a sample flask application (see the example
folder). This app displays videos
that can be played on YouTube. The image, subtitle of author and view count are reused throughout the
app. Here's a visual:
Check out the demo / example application to see it in action.
Installation
It's just pip install jinja-partials
and you're all set with this pure Python package.
Usage
Using the library is incredible easy. The first step is to register the partial method with Jinja and Flask. Do this once at app startup:
import flask
import jinja_partials
app = flask.Flask(__name__)
jinja_partials.register_extensions(app)
# ...
Next, you define your main HTML (Jinja2) templates as usual. Then define your partial templates. I recommend locating and naming them accordingly:
├── templates
│ ├── home
│ │ ├── index.html
│ │ └── listing.html
│ └── shared
│ ├── _layout.html
│ └── partials
│ ├── partial_video_image.html
│ └── partial_video_square.html
Notice the partials
subfolder in the templates
folder.
The templates are just HTML fragments. Here is a stand-alone one for the YouTube thumbnail from the example app:
<img src="https://img.youtube.com/vi/{{ video.id }}/maxresdefault.jpg"
class="img img-responsive {{ ' '.join(classes) }}"
alt="{{ video.title }}"
title="{{ video.title }}">
Notice that an object called video
and list of classes are passed in as the model.
Templates can also be nested. Here is the whole single video fragment with the image as well as other info linking out to YouTube:
<div>
<a href="https://www.youtube.com/watch?v={{ video.id }}" target="_blank">
{{ render_partial('shared/partials/partial_video_image.html', video=video) }}
</a>
<a href="https://www.youtube.com/watch?v={{ video.id }}" target="_blank"
class="author">{{ video.author }}</a>
<div class="views">{{ "{:,}".format(video.views) }} views</div>
</div>
Now you see the render_partial()
method. It takes the subpath into the templates folder and
any model data passed in as keyword arguments.
We can finally generate the single video blocks as follows:
{% for v in videos %}
<div class="col-md-3 video">
{{ render_partial('shared/partials/partial_video_square.html', video=v) }}
</div>
{% endfor %}
This time, we reframe each item in the list from the outer template (called v
) as the video
model
in the outer HTML section.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distribution
File details
Details for the file jinja_partials-0.1.0-py3-none-any.whl
.
File metadata
- Download URL: jinja_partials-0.1.0-py3-none-any.whl
- Upload date:
- Size: 4.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.4.2 importlib_metadata/4.6.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.61.2 CPython/3.9.6
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | d5ec915d09fdcb4f79e72aa3c185dcc76458324f011d1cb3bdaed69290c142d2 |
|
MD5 | 636f5fd951209c13e2fe6e9a91fa20ec |
|
BLAKE2b-256 | 6f69612891f0e3f28f658ca95433ce36cafe831efd2978b1a47f038cbb4d5d58 |