用途:在 Django 项目中集成 htmx,实现局部渲染与动态交互,减少手写 JavaScript。
安装与配置:pip install django-htmx;将 "django_htmx" 加入 INSTALLED_APPS;在 MIDDLEWARE 中加入 "django_htmx.middleware.HtmxMiddleware"(位于 SessionMiddleware 之后、AuthenticationMiddleware 之前),以启用 request.htmx。基础模板中 {% load django_htmx %} 后使用 {% htmx_script %} 引入脚本,并在 <body> 上设置 hx-headers 携带 CSRF token,否则 POST/PUT/DELETE 会返回 403。Jinja2 需将 htmx_script 注册为全局。
主要能力:request.htmx 可判断请求来源,并提供 boosted、current_url、target、trigger、prompt 等属性。http 模块提供 HttpResponseClientRedirect、HttpResponseClientRefresh、HttpResponseLocation、HttpResponseStopPolling 等响应类,以及 push_url、replace_url、reswap、retarget、reselect、trigger_client_event 等修改函数。模板标签提供 querystring 过滤器(Django 4.1+)与 json_script。
使用建议:配合 django-template-partials 做片段渲染;保持缓存模板加载器开启;对 htmx 请求使用 vary_on_headers("HX-Request")。避免向 hx-get 返回 JSON、遗漏 hx-swap-oob、缺少 CSRF token、过频轮询等反模式。
测试与限制:服务端可测试片段内容、HX-Response 头、OOB 交换与 CSRF;实际 DOM 交换、触发时序与客户端事件需用 Playwright 或 Cypress 等端到端测试。CSP 集成与扩展测试模式见其 references 文档。官方文档:https://django-htmx.readthedocs.io/