微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

来自django后端消息的HTMX - 已解决

如何解决来自django后端消息的HTMX - 已解决

简介

经过大量试验和错误后,我想使用 HTMX 来显示来自 django 后端的消息我最终得到了一个可行的解决方案,我想把它留给任何寻找它的人 - 另外,请随时发布您的建议.不幸的是,除了 htmx-django 包中的一些 example 之外,几乎没有可用的教程材料。请务必查看示例,因为它涵盖了一些专门针对 django 用户的基础知识!

解决方法

解决方案

对于 HTMX,我们需要在 DOM 中的某个地方有一个 HTMX 可以使用的小元素(例如交换)。放置例如一个

<div id="msg">
    {% include "app/messages-partial.html" %} 
</div> 

在您的 index.html 上的某处。现在我们想使用这个元素来填充内容,如果需要的话。假设我们单击一个按钮,该按钮与视图通信并发布答案。在 Django 中,使用 render:

创建响应
class TestView(TemplateView):
    template_name = "index.html"
    
    def get(self,request,*args,**kwargs):
        ...
        class_code = """class='alert alert-dismissible fade show'"""
        msg_str = """testmessage"""
        msg_btn = """<button type='button' class='close' data-dismiss='alert'>x</button>"""
        msg = mark_safe(f"""<div {classcode}>{msg_str}{msg_btn}</div>""")
        return render(request,"app/messages-partial.html",{"msg": msg})

以及 path 中相应的 urls.py

path("action/",views.TestView.as_view(),name = "test"),

我创建了一个简单的 messages-partial.html

{% if msg %}
    {{ msg }}
{% endif %}

所以我想要的是,当我触发视图时,{{ msg }} 被 HTMX 替换(交换)为响应的内容。因此,我在 index.html 的其他地方实现了 HTMX 部分,如下所示:

<div class="..."
     hx-get="/action"
     hx-swap="innerHTML"
     hx-target="#msg" >
         <button class="btn btn-primary">TEST</button>
</div>

前一个 <div id="msg">...</div> 将与 {{ msg }} 交换(我加入了典型的 django-messages 关闭按钮)。

感谢 htmx discord 频道,在这里友好的人们与我分享了他们的知识。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。