Slippers is a lightweight library for Django that makes your HTML components available as template tags.
Project description
Slippers
Slippers is a lightweight library for Django that makes your HTML components available as template tags.
{% card variant="small" %}
<h1>Slippers is cool</h1>
{% button %}Super cool{% endbutton %}
{% button variant="secondary" %}Lit af{% endbutton %}
{% endcard %}
Why?
I want to be able to make reusable components, but the syntax for {% include %}
is too verbose. Plus it doesn't allow me to specify child elements.
Show me how it works
First create your template. Wherever you would normally put it is fine.
{# myapp/templates/myapp/card.html #}
<div class="card">
<h1 class="card__header">{{ heading }}</h1>
<div class="card__body">
{# Child elements are rendered by `{{ children }}` #}
{{ children }}
</div>
</div>
Next, create a components.yaml
file. By default, Slippers looks for this file in the root template folder.
# myapp/templates/components.yaml
# Components that have child elements
block_components:
card: "myapp/card.html"
# Components that don't have child elements
inline_components:
avatar: "myapp/avatar.html"
You can now use the components like so:
{% load slippers %}
{% card heading="Slippers is awesome" %}
<span>Hello {{ request.user.full_name }}!</span>
{% endcard %}
And the output:
<div class="card">
<h1 class="card__header">Slippers is awesome</h1>
<div class="card__body">
<span>Hello Ryland Grace!</span>
</div>
</div>
Installation
pip install slippers
Add it to your INSTALLED_APPS
:
INSTALLED_APPS = [
...
'slippers',
...
]
Documentation
The components.yaml
file
This file should be placed at the root template directory. E.g. myapp/templates/components.yaml
.
The structure of the file is as follows:
# Components that have child elements are called "block" components
block_components:
# The key determines the name of the template tag. So `card` would generate
# `{% card %}{% endcard %}`
# The value is the path to the template file as it would be if used with {% include %}
card: "myapp/card.html"
# Components that don't have child elements are called "inline" components
inline_components:
avatar: "myapp/avatar.html"
This file also doubles as an index of available components which is handy.
Context
Unlike {% include %}
, using the component template tag will not pass the
current context to the child component. This is a design decision. If you need
something from the parent context, you have to explicitly pass it in via keyword
arguments, or use {% include %}
instead.
{% with not_passed_in="Lorem ipsum" %}
{% button is_passed_in="Dolor amet" %}Hello{% endbutton %}
{% endwith %}
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file slippers-0.1.2.tar.gz
.
File metadata
- Download URL: slippers-0.1.2.tar.gz
- Upload date:
- Size: 4.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.1.0 CPython/3.8.6 Darwin/20.5.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | a2129789b08c5902b46db09e19e53c7cb507690cd5d33bf5f45982e0bd897d75 |
|
MD5 | 1ad75a792e01cd0c484c9beab55d59df |
|
BLAKE2b-256 | 042b31062b1dd23ff0cbf5e686bec6bd6de6b1ab536f96d5c6595af0702fda4b |
File details
Details for the file slippers-0.1.2-py3-none-any.whl
.
File metadata
- Download URL: slippers-0.1.2-py3-none-any.whl
- Upload date:
- Size: 5.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.1.0 CPython/3.8.6 Darwin/20.5.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | ac5c3de58959dd0bd3b4e60d8d4d706fa75ed88cf78790f78f027197f48e5402 |
|
MD5 | bbd193e80ade27b78130c030c5ea1692 |
|
BLAKE2b-256 | 7c2c271c2ac989d9e441b04a27b4d93e5484e9c2b38df3dd5b8423caab15cd65 |