如何从本身触发 hx-get 调用的 SSE 事件中获取 htmx get 的 url?

2023-12-05

我正在将 django 与 django-channels 和 htmx 一起使用。

在某些情况下,我的 django 视图将向订阅相关频道的用户发送 SSE 事件,例如通知。其中一些事件(取决于事件名称)需要触发模式弹出窗口(例如电子商务订单或服务完成后的评级模式)。

我已经实现了服务器端事件和数据生成的要求。我想在前端使用 htmx sse 扩展(django 模板)。

我的问题是,我想要一个事件,比方说order_complete,并用它来触发hx-get调用将由 sse 事件发送的特定 url。那hx-get然后, 的响应将被放置在模态视图逻辑存在的占位符中。我可以获取事件并触发 get 请求,如 htmx sse 扩展文档中所述,但我不知道如何获取要放入 hx-get 中的 url。

我对 JavaScript 知之甚少,对 htmx 知之甚少。我研究过带外交换,但我不确定这是否是我需要的。

如果有任何意见或建议,包括非 htmx 解决方案,如果它性能更好或更容易的话,我将不胜感激。

谢谢。


您可以将参数附加到(固定)url。

在客户端 JavaScript 中处理 sseMessage 事件。


    document.body.addEventListener('htmx:sseMessage', function (evt) {

        //* check if this event is the one you want to use
        if (evt.detail.type !== "order_complete") {
            return;
        }

        //* If a JSON string was sent, leave it as it is 
        //evt.detail.elt.setAttribute("hx-vals", evt.detail.data);

        //* if not
        var msg = {};
        msg.orderId = evt.detail.data;   
        evt.detail.elt.setAttribute("hx-vals", JSON.stringify(msg));
    });

see https://htmx.org/attributes/hx-vals/

如果 evt.detail.data 为 123,则生成 url:

/orders/showmodal?orderId=123

html:

    <div hx-ext="sse" sse-connect="/sse-something">
        <div hx-get="/orders/showmodal"
                hx-trigger="sse:order_complete"
                hx-swap="innerHTML"
                hx-target="#idModalPlaceholder">
        </div>
    </div>

Update
您还可以仅使用事件侦听器订单完成.


    document.body.addEventListener('sse:order_complete', function (evt) {

        //* If a JSON string was sent, leave it as it is 
        //evt.detail.elt.setAttribute("hx-vals", evt.detail.data);

        //* if not
        var msg = {};
        msg.orderId = evt.detail.data;   
        evt.detail.elt.setAttribute("hx-vals", JSON.stringify(msg));
    });
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从本身触发 hx-get 调用的 SSE 事件中获取 htmx get 的 url? 的相关文章

  • 如何在 django-crispy-forms 中将表单字段分布在两列布局上?

    我收到了一些使用 django crispy forms 在 Django 中创建表单的建议 我已经在文档中寻找了几个小时 但无法找出如何将表单字段分布在两列上的方法 看这个例子here https gist github com 1838
  • django PermissionRequiredMixin Permission_required 不起作用

    Views py class templateList PermissionRequiredMixin TemplateView permission required accounts template all def get self
  • 在视图之间共享并在 AppConfig 中初始化的变量

    我想要一个在应用程序启动时初始化的变量 并且可以从视图访问该变量 my app my config py class WebConfig AppConfig name verbose name def ready self print lo
  • 如何在浏览器中打开生成的PDF文件?

    我编写了一个 Pdf 合并器 它将原始文件与水印合并 我现在想做的是通过 Django 视图在浏览器中打开 document output pdf 文件 我已经检查了Django的相关文章 但是由于我的方法相对不同 我不直接创建PDF对象
  • Django 多个外键,相同的相关名称

    我想创建一个模型 1 其中具有相同其他模型 2 的多个外键 我希望这些外键具有相同的related name因为每个外键将指向 model 2 的不同实例 因为我需要所有外键的一个反向关系 也许一个例子会更明确 class Parent M
  • 电子商务是否从头开始

    我需要开发一个包含电子商务部分的新网站 我来这里是想从你那里得到一些关于我应该走哪条路的提示 该网站将有一个静态部分 其中包括一些静态页面和用于销售产品的电子商务部分 我是 Django 和 PHP 开发人员 但这是我第一次需要开发电子商务
  • 如何覆盖和扩展基本的 Django 管理模板?

    如何覆盖管理模板 例如 admin index html 同时扩展它 请参阅https docs djangoproject com en dev ref contrib admin overriding vs replacing an a
  • 使用 django-rest-framework 设置对象级权限

    尝试使用 django rest framework 最干净 最规范地管理 django guardian 对象级权限 我想将对象的读取权限 module view object 分配给在执行 POST 时发出请求的用户 我的基于阶级的观点
  • 覆盖现有的 django-admin 命令

    除了编写自定义 django admin 命令之外 这是有详细记录的 https docs djangoproject com en 1 9 howto custom management commands 我希望能够覆盖现有命令 例如ma
  • 如何延长 django-redis 中的缓存 ttl(生存时间)?

    我正在使用 django 1 5 4 和 django redis 3 7 1 我想延长缓存的 ttl 生存时间 当我取回它时 这是示例代码 from django core cache import cache foo cache get
  • Django 单元测试数据库没有被拆除?

    我编写了一些单元测试来测试我的 Django 应用程序 特别是一个测试套件中包含大量代码setUp 功能 所述代码的目的是为数据库创建测试数据 是的 我了解固定装置 并且选择在这种情况下不使用它们 当我运行单元测试套件时 运行的第一个测试通
  • Django 表单中的只读字段

    如何在 Django 表单中将字段设置为只读 我知道如何禁用某个字段 但这不是我想要的 任何帮助 将不胜感激 您可以使用可选的attrs定义时的参数Field 以机智 somefield forms CharField widget for
  • 如何在 django 表单声明中设置标签的 css 类?

    我正在使用 django uniform 并使用一些统一的功能 我正在寻找一种直接从表单声明添加 css 类的方法 对于独立小部件 作为奖励 这里是我的可重复使用的只读自制混合片段 from django import forms def
  • ValueError:以 10 为基数的 int() 的文字无效:

    当我尝试将一些数据插入 django 模型时 我收到此值错误 我的Python脚本是 from task employeeDetails models import EmployeeDetails def dumpdata userName
  • 如何使用 Python 避免在 JSON 中的 HTML 标签中关闭“/”?

    注意 这个问题非常接近在脚本标签中嵌入 JSON 对象 https stackoverflow com questions 4176511 embedding json objects in script tags 但是对该问题的回答提供了
  • 带有中间页面的 Django 管理操作:未获取信息

    我正在尝试创建一个管理操作 将自定义时间增量添加到某个日期 时间增量将从中间页面的输入中读取 确认后 我将将该增量应用到之前选择的每个实例 使用此代码 我针对这个问题进行了简化 我无法获取输入的时间增量的值 我无法判断用户是否按下了 应用
  • 使用 pyinstaller 将 Django 移植到桌面应用程序

    我正在尝试将 django 项目转换为桌面应用程序 我已经下载了 pyinstaller 的开发人员版本 github pyinstaller pyinstaller hookutils py 修改如下 http www pyinstall
  • kombu.exceptions.EncodeError:用户不可 JSON 序列化

    我有 django 1 11 5 应用程序和 celery 4 1 0 我一直收到 kombu exceptions EncodeError
  • 导入错误:没有名为 app_name 的模块

    我是 python 新手 我在 SO 上看到过类似的问题 但无法弄清楚我的 Django 应用程序出了什么问题 在 settings py 中 我以点线模块形式添加了我的应用程序 INSTALLED APPS django contrib
  • 在 django 视图中执行阻塞请求

    在我的 django 应用程序的一个视图中 我需要执行相对较长的网络 IO 操作 问题是其他请求必须等待该请求完成 即使它们与该请求无关 我做了一些研究并偶然发现了 Celery 但据我了解 它用于执行独立于请求的后台任务 所以我不能使用任

随机推荐