Name | turbo-django JSON |
Version |
0.4.4
JSON |
| download |
home_page | |
Summary | Unmaintained // Integrate Hotwire Turbo with Django allowing for a Python-driven dynamic web experience. |
upload_time | 2023-12-26 13:02:29 |
maintainer | |
docs_url | None |
author | Nikita Marchant |
requires_python | >=3.8,<4.0 |
license | MIT |
keywords |
|
VCS |
|
bugtrack_url |
|
requirements |
No requirements were recorded.
|
Travis-CI |
No Travis.
|
coveralls test coverage |
No coveralls.
|
[![Build Status](https://img.shields.io/endpoint.svg?url=https%3A%2F%2Factions-badge.atrox.dev%2Fhotwire-django%2Fturbo-django%2Fbadge%3Fref%3Dmain&style=flat)](https://actions-badge.atrox.dev/hotwire-django/turbo-django/goto?ref=main)
[![Documentation Status](https://readthedocs.org/projects/turbo-django/badge/?version=latest)](https://turbo-django.readthedocs.io/en/latest/?badge=latest)
[![Issues](https://img.shields.io/github/issues/hotwire-django/turbo-django)](https://img.shields.io/github/issues/hotwire-django/turbo-django)
[![Twitter](https://img.shields.io/twitter/url?style=social&url=https%3A%2F%2Ftwitter.com%2FDjangoHotwire)](https://twitter.com/intent/tweet?text=Wow:&url=https%3A%2F%2Fgithub.com%2Fhotwire-django%2Fturbo-django)
# 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](https://turbo.hotwired.dev/) 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:
```python
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:
```sh
./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`.
```python
# streams.py
import turbo
class BroadcastStream(turbo.Stream):
pass
```
Then, create a template that subscribes to the stream.
```python
from django.urls import path
from django.views.generic import TemplateView
urlpatterns = [
path('quickstart/', TemplateView.as_view(template_name='broadcast_example.html'))
]
```
```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.
```python
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](https://turbo-django.readthedocs.io/en/latest/index.html) and read more about what Turbo can do for you.
## Documentation
Read the [full documentation](https://turbo-django.readthedocs.io/en/latest/index.html) at readthedocs.io.
## Contribute
Discussions about a Django/Hotwire integration are happening on the [Hotwire forum](https://discuss.hotwired.dev/t/django-backend-support-for-hotwire/1570). And on Slack, which you can join by [clicking here!](https://join.slack.com/t/pragmaticmindsgruppe/shared_invite/zt-kl0e0plt-uXGQ1PUt5yRohLNYcVvhhQ)
As this new magic is discovered, you can expect to see a few repositories with experiments and demos appear in [@hotwire-django](https://github.com/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](https://opensource.org/licenses/MIT) to keep compatibility with the Hotwire project.
If you submit a pull request. Remember to add yourself to `CONTRIBUTORS.md`!
Raw data
{
"_id": null,
"home_page": "",
"name": "turbo-django",
"maintainer": "",
"docs_url": null,
"requires_python": ">=3.8,<4.0",
"maintainer_email": "",
"keywords": "",
"author": "Nikita Marchant",
"author_email": "C4ptainCrunch@github-username.x",
"download_url": "https://files.pythonhosted.org/packages/58/7b/bd6a1f8862692402908fad1ee1799ef59388286a16c1ccb5ad2bd3de3187/turbo_django-0.4.4.tar.gz",
"platform": null,
"description": "[![Build Status](https://img.shields.io/endpoint.svg?url=https%3A%2F%2Factions-badge.atrox.dev%2Fhotwire-django%2Fturbo-django%2Fbadge%3Fref%3Dmain&style=flat)](https://actions-badge.atrox.dev/hotwire-django/turbo-django/goto?ref=main)\n[![Documentation Status](https://readthedocs.org/projects/turbo-django/badge/?version=latest)](https://turbo-django.readthedocs.io/en/latest/?badge=latest)\n[![Issues](https://img.shields.io/github/issues/hotwire-django/turbo-django)](https://img.shields.io/github/issues/hotwire-django/turbo-django)\n[![Twitter](https://img.shields.io/twitter/url?style=social&url=https%3A%2F%2Ftwitter.com%2FDjangoHotwire)](https://twitter.com/intent/tweet?text=Wow:&url=https%3A%2F%2Fgithub.com%2Fhotwire-django%2Fturbo-django)\n\n# Unmaintained // Turbo for Django\n\n> [!WARNING] \n> This library is unmaintained. Integrating Hotwire and Django is so easy\n> that you are probably better served by writing a little bit of Python in your code\n> than using a full-blown library that adds another level of abstraction.\n> It also seems that the Django community is leaning more towards HTMX than Hotwire\n> so you might want to look over there if you want more \"support\"\n> (but we still think that Hotwire is very well suited to be used with Django)\n\nIntegrate [Hotwire Turbo](https://turbo.hotwired.dev/) with Django with ease.\n\n\n## Requirements\n\n- Python 3.8+\n- Django 3.1+\n- Channels 3.0+ _(Optional for Turbo Frames, but needed for Turbo Stream support)_\n\n## Installation\n\nTurbo Django is available on PyPI - to install it, just run:\n\n pip install turbo-django\n\nAdd `turbo` and `channels` to `INSTALLED_APPS`, and copy the following `CHANNEL_LAYERS` setting:\n\n```python\nINSTALLED_APPS = [\n ...\n 'turbo',\n 'channels'\n ...\n]\n\nCHANNEL_LAYERS = {\n \"default\": {\n # You will need to `pip install channels_redis` and configure a redis instance.\n # Using InMemoryChannelLayer will not work as the memory is not shared between threads.\n # See https://channels.readthedocs.io/en/latest/topics/channel_layers.html\n \"BACKEND\": \"channels_redis.core.RedisChannelLayer\",\n \"CONFIG\": {\n \"hosts\": [(\"127.0.0.1\", 6379)],\n },\n }\n}\n\n```\n\nAnd collect static files if the development server is not hosting them:\n\n```sh\n./manage.py collectstatic\n```\n\n_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._\n\n## Quickstart\nWant to see Hotwire in action? Here's a simple broadcast that can be setup in less than a minute.\n\n**The basics:**\n\n* A Turbo Stream class is declared in python.\n\n* A template subscribes to the Turbo Stream.\n\n* HTML is be pushed to all subscribed pages which replaces the content of specified HTML p tag.\n\n\n### Example\n\nFirst, in a django app called `quickstart`, declare `BroadcastStream` in a file named `streams.py`.\n\n```python\n# streams.py\n\nimport turbo\n\nclass BroadcastStream(turbo.Stream):\n pass\n\n```\n\nThen, create a template that subscribes to the stream.\n\n```python\nfrom django.urls import path\nfrom django.views.generic import TemplateView\n\nurlpatterns = [\n path('quickstart/', TemplateView.as_view(template_name='broadcast_example.html'))\n]\n```\n\n```html\n# broadcast_example.html\n\n{% load turbo_streams %}\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n {% include \"turbo/head.html\" %}\n</head>\n<body>\n {% turbo_subscribe 'quickstart:BroadcastStream' %}\n\n <p id=\"broadcast_box\">Placeholder for broadcast</p>\n</body>\n</html>\n```\n\nNow 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.\n\n```python\nfrom quickstart.streams import BroadcastStream\nfrom datetime import datetime\n\nBroadcastStream().update(text=f\"The date and time is now: {datetime.now()}\", id=\"broadcast_box\")\n```\n\nWith the `quickstart/` path open in a browser window, watch as the broadcast pushes messages to the page.\n\nNow 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.\n\nExcited to learn more? Be sure to walk through the [tutorial](https://turbo-django.readthedocs.io/en/latest/index.html) and read more about what Turbo can do for you.\n\n## Documentation\nRead the [full documentation](https://turbo-django.readthedocs.io/en/latest/index.html) at readthedocs.io.\n\n\n## Contribute\n\nDiscussions about a Django/Hotwire integration are happening on the [Hotwire forum](https://discuss.hotwired.dev/t/django-backend-support-for-hotwire/1570). And on Slack, which you can join by [clicking here!](https://join.slack.com/t/pragmaticmindsgruppe/shared_invite/zt-kl0e0plt-uXGQ1PUt5yRohLNYcVvhhQ)\n\nAs this new magic is discovered, you can expect to see a few repositories with experiments and demos appear in [@hotwire-django](https://github.com/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.\n\n\n## License\n\nTurbo-Django is released under the [MIT License](https://opensource.org/licenses/MIT) to keep compatibility with the Hotwire project.\n\nIf you submit a pull request. Remember to add yourself to `CONTRIBUTORS.md`!\n\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "Unmaintained // Integrate Hotwire Turbo with Django allowing for a Python-driven dynamic web experience.",
"version": "0.4.4",
"project_urls": null,
"split_keywords": [],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "6da4bac4fa62b4312fbd1de40d0c5ef5c0a9f196101ee74990acab0ded9c472a",
"md5": "3f10d32524629ab360eddbaebd1b0fae",
"sha256": "535b55d6922e54c9331171212b38f7294f6bfaaaa5ccdbe634fb6a54be72cace"
},
"downloads": -1,
"filename": "turbo_django-0.4.4-py3-none-any.whl",
"has_sig": false,
"md5_digest": "3f10d32524629ab360eddbaebd1b0fae",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.8,<4.0",
"size": 35386,
"upload_time": "2023-12-26T13:02:26",
"upload_time_iso_8601": "2023-12-26T13:02:26.796802Z",
"url": "https://files.pythonhosted.org/packages/6d/a4/bac4fa62b4312fbd1de40d0c5ef5c0a9f196101ee74990acab0ded9c472a/turbo_django-0.4.4-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "587bbd6a1f8862692402908fad1ee1799ef59388286a16c1ccb5ad2bd3de3187",
"md5": "421ad4c9daffc621787681a0a30ff9ee",
"sha256": "9f83c811ea5762eeda2f5e2fed0a2482ebb628a6c8f2bfe445fe374a5a015fda"
},
"downloads": -1,
"filename": "turbo_django-0.4.4.tar.gz",
"has_sig": false,
"md5_digest": "421ad4c9daffc621787681a0a30ff9ee",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.8,<4.0",
"size": 33514,
"upload_time": "2023-12-26T13:02:29",
"upload_time_iso_8601": "2023-12-26T13:02:29.239977Z",
"url": "https://files.pythonhosted.org/packages/58/7b/bd6a1f8862692402908fad1ee1799ef59388286a16c1ccb5ad2bd3de3187/turbo_django-0.4.4.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2023-12-26 13:02:29",
"github": false,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"lcname": "turbo-django"
}