You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Django模板中使用HTMX/JavaScript遇bootstrap未定义问题

解决模板脚本中bootstrap和htmx未定义的问题

问题原因

webpack 默认会将 ES 模块包裹在独立的函数作用域中,你在 index.js 里通过 import 引入的 bootstrap 和 htmx 仅存在于模块内部,不会自动暴露到全局作用域。而模板内的 <script> 属于全局作用域,因此无法访问这些模块变量。

解决方案

方案1:手动将模块挂载到全局window对象

修改你的 index.js,把 bootstrap 和 htmx 挂载到 window 上,让全局脚本能访问到:

import "../scss/myapp.scss";
import "../css/style.css";
import htmx from 'htmx.org';
import * as bootstrap from "bootstrap";

// 挂载到全局window对象
window.htmx = htmx;
window.bootstrap = bootstrap;

方案2:将模板脚本迁移到webpack打包的模块中

把模板里的逻辑移到 index.js 里,避免依赖全局变量,更符合模块化规范:

import "../scss/myapp.scss";
import "../css/style.css";
import htmx from 'htmx.org';
import * as bootstrap from "bootstrap";

// 等待DOM加载完成后执行
document.addEventListener('DOMContentLoaded', () => {
  const modalElement = document.getElementById('thingModal');
  if (!modalElement) return;

  const modal = new bootstrap.Modal(modalElement);
  
  htmx.on('htmx:afterSwap', (e) => {
    if (e.detail.target.id === 'thingSection') {
      modal.show();
    }
  });
});

之后删除模板内的 <script> 代码即可。

方案3:确保打包脚本的加载顺序

检查基础模板中脚本的引入顺序,必须保证 webpack 打包后的 vendors.h3117haj3.js 在模板内的 <script> 之前加载,比如:

<!-- 先加载webpack打包的脚本 -->
<script src="{% static 'js/vendors.h3117haj3.js' %}"></script>
<!-- 再加载模板内的脚本 -->
<script>
const modal = new bootstrap.Modal(document.getElementById("thingModal"))
// ... 其余代码
</script>

内容的提问来源于stack exchange,提问作者Hanny

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 16:55:36