Skip to main content

Build Status Documentation Status Issues Twitter

Unmaintained // Turbo for Django

[!WARNING]
This library is unmaintained. Integrating Hotwire and Django is so easy that you are probably better served by writing a little bit of Python in your code than using a full-blown library that adds another level of abstraction. It also seems that the Django community is leaning more towards HTMX than Hotwire so you might want to look over there if you want more "support" (but we still think that Hotwire is very well suited to be used with Django)

Integrate Hotwire Turbo with Django with ease.

Requirements

  • Python 3.8+
  • Django 3.1+
  • Channels 3.0+ (Optional for Turbo Frames, but needed for Turbo Stream support)

Installation

Turbo Django is available on PyPI - to install it, just run:

pip install turbo-django

Add turbo and channels to INSTALLED_APPS, and copy the following CHANNEL_LAYERS setting:

INSTALLED_APPS = [
    ...
    'turbo',
    'channels'
    ...
]

CHANNEL_LAYERS = {
    "default": {
        # You will need to `pip install channels_redis` and configure a redis instance.
        # Using InMemoryChannelLayer will not work as the memory is not shared between threads.
        # See https://channels.readthedocs.io/en/latest/topics/channel_layers.html
        "BACKEND": "channels_redis.core.RedisChannelLayer",
        "CONFIG": {
            "hosts": [("127.0.0.1", 6379)],
        },
    }
}

And collect static files if the development server is not hosting them:

./manage.py collectstatic

Note: Both Hotwire and this library are still in beta development and may introduce breaking API changes between releases. It is advised to pin the library to a specific version during install.

Quickstart

Want to see Hotwire in action? Here's a simple broadcast that can be setup in less than a minute.

The basics:

  • A Turbo Stream class is declared in python.

  • A template subscribes to the Turbo Stream.

  • HTML is be pushed to all subscribed pages which replaces the content of specified HTML p tag.

Example

First, in a django app called quickstart, declare BroadcastStream in a file named streams.py.

# streams.py

import turbo

class BroadcastStream(turbo.Stream):
    pass

Then, create a template that subscribes to the stream.

from django.urls import path
from django.views.generic import TemplateView

urlpatterns = [
    path('quickstart/', TemplateView.as_view(template_name='broadcast_example.html'))
]
# broadcast_example.html

{% load turbo_streams %}
<!DOCTYPE html>
<html lang="en">
<head>
    {% include "turbo/head.html" %}
</head>
<body>
    {% turbo_subscribe 'quickstart:BroadcastStream' %}

    <p id="broadcast_box">Placeholder for broadcast</p>
</body>
</html>

Now run ./manage.py shell. Import the Turbo Stream and tell the stream to take the current timestamp and update the element with id broadcast_box on all subscribed pages.

from quickstart.streams import BroadcastStream
from datetime import datetime

BroadcastStream().update(text=f"The date and time is now: {datetime.now()}", id="broadcast_box")

With the quickstart/ path open in a browser window, watch as the broadcast pushes messages to the page.

Now change .update() to .append() and resend the broadcast a few times. Notice you do not have to reload the page to get this modified behavior.

Excited to learn more? Be sure to walk through the tutorial and read more about what Turbo can do for you.

Documentation

Read the full documentation at readthedocs.io.

Contribute

Discussions about a Django/Hotwire integration are happening on the Hotwire forum. And on Slack, which you can join by clicking here!

As this new magic is discovered, you can expect to see a few repositories with experiments and demos appear in @hotwire-django. If you too are experimenting, we encourage you to ask for write access to the GitHub organization and to publish your work in a @hotwire-django repository.

License

Turbo-Django is released under the MIT License to keep compatibility with the Hotwire project.

If you submit a pull request. Remember to add yourself to CONTRIBUTORS.md!

Release files for turbo-django 0.4.4

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for turbo-django 0.4.4
File Size Uploaded
turbo_django-0.4.4.tar.gz 33.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for turbo-django 0.4.4
File Interpreter ABI Platform
turbo_django-0.4.4-py3-none-any.whl Python 3 none any Details

Total release size: 68.9 kB

Release files / turbo_django-0.4.4.tar.gz

Download URL turbo_django-0.4.4.tar.gz
Size 33.5 kB
Tags Source
SHA-256 checksum
How to use checksums
9f83c811ea5762eeda2f5e2fed0a2482ebb628a6c8f2bfe445fe374a5a015fda
BLAKE2b-256 checksum
How to use checksums
587bbd6a1f8862692402908fad1ee1799ef59388286a16c1ccb5ad2bd3de3187
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.9.6

Release files / turbo_django-0.4.4-py3-none-any.whl

Download URL turbo_django-0.4.4-py3-none-any.whl
Size 35.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
535b55d6922e54c9331171212b38f7294f6bfaaaa5ccdbe634fb6a54be72cace
BLAKE2b-256 checksum
How to use checksums
6da4bac4fa62b4312fbd1de40d0c5ef5c0a9f196101ee74990acab0ded9c472a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.9.6

Release history Release notifications | RSS feed

This release

0.4.4 This release

2 release files

0.4.3

2 release files

0.4.2

2 release files

0.4.1

2 release files

0.4.0

2 release files

0.3.0

2 release files

0.2.5

2 release files

0.2.4

2 release files

0.2.3

2 release files

0.2.2

2 release files

0.2.1

2 release files

0.2.0

2 release files

0.1.1

1 release file

0.1.0

1 release file

0.0.1

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page