Skip to main content

Use HTML tags to include HTML template components.

Project description

plain.elements

Use HTML tags to include HTML template components.

Overview

Elements are an alternative to Jinja {% include %} or macros and flow better with existing HTML by using a compatible syntax. They are distinguished from built-in HTML tags by using a capitalized tag name (so <Button> doesn't clash with <button>).

To make a <Submit> element, for example, you would create a template named templates/elements/Submit.html.

<!-- templates/elements/Submit.html -->
<button type="submit" class="btn">
    {{ children }}
</button>

An element can be used in any other template by enabling them with {% use_elements %} and then using the capitalized tag name.

{% extends "admin/base.html" %}

{% use_elements %}

{% block content %}
<form method="post">
    <!-- Form fields here -->
    <Submit>Save</Submit>
</form>
{% endblock %}

Element attributes

Attributes will be passed through using regular strings or single braces {} for Python variables.

{% extends "admin/base.html" %}

{% use_elements %}

{% block content %}
<form method="post">
    <FormInput field={form.username} placeholder="Username" label="Username" />
    <Submit>Save</Submit>
</form>
{% endblock %}

The attributes are passed to the element as named variables. By default in Plain, you will get an error if you try to use an undefined variable, so Jinja features like |default and is defined are useful for optional attributes.

<!-- templates/elements/FormInput.html -->
<label for="{{ field.html_id }}">
    {{ label }}
</label>
<input
    id="{{ field.html_id }}"
    type="{{ type|default('text') }}"
    name="{{ field.html_name }}"
    value="{{ field.value() or '' }}"
    placeholder="{{ placeholder }}"
    {% if field.field.required %}required{% endif %}
    />

Namespaced elements

Especially for reusable packages, it can be useful to namespace your elements by putting them in a subdirectory of templates/elements/. To use namespaced elements, you need to include the full dot-separated path in your HTML tag.

For example, an element in templates/elements/admin/Submit.html would be used like this:

{% use_elements %}

{% block content %}
<form method="post">
    <admin.Submit>Save</admin.Submit>
</form>
{% endblock %}

Installation

Install the plain.elements package from PyPI:

uv add plain.elements

Add it to your INSTALLED_PACKAGES setting. That's it! The Jinja extension will be enabled automatically.

# settings.py
INSTALLED_PACKAGES = [
    # ...
    "plain.elements",
]

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

plain_elements-0.10.0.tar.gz (6.2 kB view details)

Uploaded Source

Built Distribution

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

plain_elements-0.10.0-py3-none-any.whl (7.5 kB view details)

Uploaded Python 3

File details

Details for the file plain_elements-0.10.0.tar.gz.

File metadata

  • Download URL: plain_elements-0.10.0.tar.gz
  • Upload date:
  • Size: 6.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.8.18

File hashes

Hashes for plain_elements-0.10.0.tar.gz
Algorithm Hash digest
SHA256 9779f6367a8ee14b64b4f1e61c453295d5a1d04791fae9ebf8a39aef8e6a47a9
MD5 4ce056b9f0802cd811f0677475886368
BLAKE2b-256 34ccb090e6b61c85a9ac083d20942ffba439655e1554e1f5f2602fe7c74c3755

See more details on using hashes here.

File details

Details for the file plain_elements-0.10.0-py3-none-any.whl.

File metadata

File hashes

Hashes for plain_elements-0.10.0-py3-none-any.whl
Algorithm Hash digest
SHA256 2634a88a9e669350ba6ad3cfe7eacfa63bb92ee1214bfa20afa70819608fe6e9
MD5 745960f424505724ed3b731a6074db07
BLAKE2b-256 99a76c09c235a330b99fa6e9de155aadc1b463e1d8094bf4a55f8d9eaf047dc0

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