Веб-сокеты HTMX с каналами Django
Я пытаюсь подключить Django channels Consumer к элементу HTMX ext-ws
, но не могу продвинуться ни на шаг.
class MessageConsumer(WebsocketConsumer):
def connect(self):
self.accept()
print("connect")
self.send(
"type": "websocket.send",
"text": "<div id='message'>Hi!</div>"
)
...
<head>
...
<script src="{% static 'common/js/htmx/htmx.min.js' %}" defer></script>
<script src="{% static 'common/js/htmx/ext/ws.js' %}" defer></script>
...
</head>
...
HTMX.js и ws.ss корректно загружаются в браузер клиента.
<div id="messages-container"
hx-ws="connect:/ws/messages/"
{# hx-ext="ws" ws-connect="/ws/messages/" does not work at all #}
>
<div id="message"></div>
</div>
Если я использую старый метод HTMX-builtin hx-ws
, по крайней мере, вебсокет подключается. Но я не могу получить сообщение на элемент HTMX (я думал, что #message
div должен быть заменен).
Если я использую синтаксис нового стиля (расширение HTMX) (hx-ext="ws" ws-connect...
)
Может ли кто-нибудь указать мне правильное направление?
В соответствии с документацией вам также необходимо включить атрибут hx-swap-oob="true"
в html, который вы отправляете обратно из websocket:
Смотрите пример из htmx GH: https://github.com/bigskysoftware/htmx/blob/master/test/servers/ws/server.go#L24