Skip to main content

Slippers allows you to build reusable components in Django without writing a single line of Python.

Project description

Slippers

PyPI version PyPI Supported Python Versions GitHub Actions (Code quality and tests)

Slippers allows you to build reusable components in Django without writing a single line of Python.

{% 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


Download files

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

Source Distribution

slippers-0.1.4.tar.gz (5.1 kB view details)

Uploaded Source

Built Distribution

slippers-0.1.4-py3-none-any.whl (5.9 kB view details)

Uploaded Python 3

File details

Details for the file slippers-0.1.4.tar.gz.

File metadata

  • Download URL: slippers-0.1.4.tar.gz
  • Upload date:
  • Size: 5.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.1.0 CPython/3.8.6 Darwin/20.5.0

File hashes

Hashes for slippers-0.1.4.tar.gz
Algorithm Hash digest
SHA256 cad7e33584344732a1224bae5e23faea86135c913ce901092072bc994ef9d0b7
MD5 e11101d91c2156e6c4d22c9149f5c3d8
BLAKE2b-256 cc2fbf9cc38c0d1365aa627fb12890186bd83b52ddae7287d66b851774e43ad6

See more details on using hashes here.

File details

Details for the file slippers-0.1.4-py3-none-any.whl.

File metadata

  • Download URL: slippers-0.1.4-py3-none-any.whl
  • Upload date:
  • Size: 5.9 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

Hashes for slippers-0.1.4-py3-none-any.whl
Algorithm Hash digest
SHA256 646cef1835e9e150af293506568e3506404b3198321b95603b8ec7c1d7bb2878
MD5 88762d8dc757e9b9283b3e35ecc3f454
BLAKE2b-256 5f8e3d69381a565c6d6420114e91548a6b297265874d182754d6b0b9827c6e9d

See more details on using hashes here.

Supported by

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