Skip to main content

A django template tag that simplifies nested templates.

Project description

Django Sandwich Tags

A django template tag that simplifies nested templates.


PyPI Version Tests Code style: black

Version: 0.1.3

Overview

The sandwich template tag is a Django template tag that allows for easy composition of templates by wrapping a child template inside a parent template. This is particularly useful when building reusable UI components where a consistent layout needs to be enforced while allowing for dynamic content injection. It complements Django's built-in template inheritance by enabling support for nestable, reusable templates and components, rather than replacing it.

Installation

To use the sandwich template tag in your Django project, install the package and add it to your Django app's template tag modules.

  1. Ensure your Django project is set up and running.
  2. Add the sandwich_tag module to one of your installed Django apps.
  3. Load the template tag in your Django template:
{% load sandwich %}

Usage

Basic Example

The sandwich template tag is used to wrap a block of content inside a parent template. The child content will be injected into the parent template at the placeholder {{ sandwich_fixings }}.

Example Parent Template (card_component.html):

<div class="card">
    <div class="card-header">
        <h2>{{ title }}</h2>
    </div>
    <div class="card-body">
        {{ sandwich_fixings }}
    </div>
</div>

Example Usage in Another Template:

{% sandwich "card_component.html" title="Welcome" %}
    <p>This content will be wrapped inside a card component.</p>
{% endsandwich %}

Passing Additional Context

Additional key-value pairs can be passed to the sandwich tag, which will be available in the parent template:

{% sandwich "card_component.html" title="User Info" theme="dark" %}
    <p>This content inherits the "theme" variable.</p>
{% endsandwich %}

Using a Template Object Instead of a String

You can also pass a Template object instead of a template filename:

{% sandwich some_template_object title="Dynamic Title" %}
    <p>Using a template object dynamically.</p>
{% endsandwich %}

How It Works

  1. The sandwich tag takes a required template argument, which specifies the parent template.
  2. The child block content is rendered separately and passed as sandwich_fixings.
  3. The parent template is rendered with any additional key-value arguments provided.

Complements Django's Template Inheritance

Django's template inheritance system is great for structuring large applications, but it lacks a built-in way to create deeply nestable, reusable templates or UI components. sandwich fills this gap by allowing content blocks to be dynamically wrapped in different parent templates while maintaining flexibility in context passing. This makes it an excellent tool for building modular front-end structures in Django applications.

Error Handling

  • If the template argument is missing, a TemplateSyntaxError is raised.
  • If template is provided both as a positional and keyword argument, an error is raised.
  • If template is not a string or a Template object, an error is raised.

License

This package is released under the MIT License.


Enjoy building templates with sandwich! 🥪

Quick Start

  1. Install the sandwich package from PyPI

    $ pip install sandwich
    
  2. Add 'sandwich' to INSTALLED_APPS:

    INSTALLED_APPS = [
        ...,
        "sandwich",
           ...,
    ]
    

Get Me Some of That

MIT License

Acknowledgments

This project would be impossible to maintain without the help of our generous contributors

Technology Colophon

Without django and the django dev team, the universe would have fewer rainbows and ponies.

This package was originally created with cookiecutter and the cookiecutter-powder-pypackage project template.

For Developers

Initialise the development environment using the invoke task

inv tox.venv

Or create it with tox directly

tox d -e dev .venv

Or install the dev requirements with pip

pip install -r reqirements_dev.txt

Tests

pytest

or

tox r

or run tox environments in parallel using

tox p

Code Style / Linting

$ isort
$ black
$ flake8

Versioning

Build / Deploy Automation

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

django_sandwich_tag-0.1.3.tar.gz (9.7 kB view details)

Uploaded Source

Built Distribution

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

django_sandwich_tag-0.1.3-py3-none-any.whl (7.6 kB view details)

Uploaded Python 3

File details

Details for the file django_sandwich_tag-0.1.3.tar.gz.

File metadata

  • Download URL: django_sandwich_tag-0.1.3.tar.gz
  • Upload date:
  • Size: 9.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for django_sandwich_tag-0.1.3.tar.gz
Algorithm Hash digest
SHA256 cf7111a00213332cc98919f2544610864034fc369e83dcc5160faed52bc7a5cf
MD5 7af7d06edcbd31ad380da40676573217
BLAKE2b-256 57ad0b6fbe84725a292aee143fff732b002aebf1d14477f82bb7bdc3f44e75d0

See more details on using hashes here.

Provenance

The following attestation bundles were made for django_sandwich_tag-0.1.3.tar.gz:

Publisher: publish.yaml on JacobTumak/django-sandwich-tag

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file django_sandwich_tag-0.1.3-py3-none-any.whl.

File metadata

File hashes

Hashes for django_sandwich_tag-0.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 c344d989a71f583c16fc3e45dd0bae40799c8adf5eb25841c05d353b59985804
MD5 0f65f0c375e331201887618b3bab320f
BLAKE2b-256 38b969b536cd3b69d593131314d63da6c14824a6ca68e6a1cefab8d563ad48cc

See more details on using hashes here.

Provenance

The following attestation bundles were made for django_sandwich_tag-0.1.3-py3-none-any.whl:

Publisher: publish.yaml on JacobTumak/django-sandwich-tag

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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