Skip to main content

Custom Django template tag for integrating hyperscript with Django templates.

Project description

Django hyperscript

Django Hyperscript is a simple Django template tag library for dumping data into _hyperscript.
It’s a wrapper around hyperscript-dump, with Django-specific features like automatic model serialization and safe output for templates.


Installation

  1. Install using pip:
pip install django-hyperscript
  1. Add django_hyperscript to INSTALLED_APPS in your Django project's settings.py:
# settings.py

INSTALLED_APPS = [
    ...,
    'django_hyperscript',
]
  1. Load the tag library in the necessary templates:
{% load hyperscript %}

Usage

By default, django-hyperscript wraps its output in a <div> with a class of hs-wrapper.

hs_dump

Dumps data into a single hyperscript variable.

{% hs_dump data 'myData' %}

assuming data is {"foo": "bar"}, the tag would output

<div class="hs-wrapper" _="
init
    set global myData to {'foo': 'bar'} 
    then remove me 
end"></div>

Using the kwarg flatten will assign the first layer of a dictionary's key value pairs into hyperscript variables. The name argument is negligible when using flatten.

{% hs_dump data flatten=True %}

assuming data is {"foo": "bar", "baz": "qux"}, the tag would output

<div class="hs-wrapper" _="
init
    set global foo to 'bar'
    set global baz to 'qux' 
    then remove me 
end"></div>

Model Serialization

Django-hyperscript includes a built-in lightweight serializer to help convert Django Model instances and QuerySets into plain data structures for use in templates. This includes instances or querysets that are nested within dictionaries or lists, which will be serialized recursively.

By default, the serializer returns all editable fields defined on the model. However, you can customize this by adding an hs_fields attribute to your model, which is a list of field names you want exposed.

class Book(models.Model):
    name = models.CharField(max_length=32)
    year_published = models.SmallIntegerField()

    hs_fields = ['name', 'year_published']

would return an instance as

{
   "name": "foo",
   "year_published": 1986
}

This serializer is intentionally minimal and does not support advanced features like relation traversal, nested serialization, field aliasing, or custom computed fields. If you need those capabilities, consider serializing your data ahead of time using Django REST Framework, or a custom serializer.

If needed, this serializer can be accessed via

from django_hyperscript.serializer import hs_serialize

Configuration

hs_dump supports all kwargs from hyperscript-dump's build_hyperscript along with some additional ones:

preserve

Type: bool | Default: False

Keeps the element the hyperscript is on in the DOM after initializing if True.

camelize

Type: bool | Default: True

"Camelizes" dictionary keys from snake case (snake_case) to camel case (camelCase) to fit JavaScript naming conventions.

flatten

Type: bool | Default: False

If True, each key value pair in a dictionary is assigned as a separate variable, rather than as a single object.

Note: Requires data to be a dictionary.

scope

Type: str | Default: global

Determines the scope of the hyperscript variable (global, element, or local).

event

Type: str | Default: init

Specifies the event that triggers assignment. The hyperscript "on" keyword should not need be provided.

Note: If preserve is False (which it is by default), the element will not be removed until after the event is fired and values are set.

debug

Type: bool | Default: False

Logs the set variable name(s) and value(s).

wrap

Type: bool | Default: True

Wraps the hyperscript in a <div> with its display set to none if True, otherwise returns the raw hyperscript text.

class

Type: str | Default: hs-wrapper

Sets the HTML class/classes on the wrapper <div>.

Final example

{% hs_dump data 'my_data' preserve=True camelize=False scope='element' wrap=False %}

assuming data is {"my_value": 25}, the tag would output

"init set element my_data to {'my_value': 25} end"

In this example:

  • The hyperscript remains in the DOM since preserve is True
  • The keys within the dumped data remain in snake case since camelize is False
  • The variable is scoped to the element the hyperscript belongs to since scope is set to 'element'
  • The output is just the raw hyperscript text since wrap is set to False

License

This project is licensed under the MIT License - see the LICENSE file for details.

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_hyperscript-1.5.1.tar.gz (6.0 kB view details)

Uploaded Source

Built Distribution

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

django_hyperscript-1.5.1-py3-none-any.whl (6.8 kB view details)

Uploaded Python 3

File details

Details for the file django_hyperscript-1.5.1.tar.gz.

File metadata

  • Download URL: django_hyperscript-1.5.1.tar.gz
  • Upload date:
  • Size: 6.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.0

File hashes

Hashes for django_hyperscript-1.5.1.tar.gz
Algorithm Hash digest
SHA256 c879c199f7a0f72c6083df997d56a8fde435564c3d67438bc79c85fb046a2698
MD5 e4fcc436481e0e6aacf9a41fbd1290f9
BLAKE2b-256 a23484136789b4e76c05b08ac0f9e891f4e74b5a3839d84296c45f9aff3f5dbe

See more details on using hashes here.

File details

Details for the file django_hyperscript-1.5.1-py3-none-any.whl.

File metadata

File hashes

Hashes for django_hyperscript-1.5.1-py3-none-any.whl
Algorithm Hash digest
SHA256 0c29fe1a3fad38769258a569b6102a2845d12b2a2fb017f0f329931ea0f590de
MD5 d651c269b482137db0f1878ce5b3f22a
BLAKE2b-256 73be717c0c9c407e52c7d3e1bf0b731c5090396ef2831e59e0e640a7b1ee66fc

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