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

如何在Nuxt/Vue组件中加载Django生成的Bokeh HTML文件内容

解决方案

方案一:使用iframe嵌套完整HTML(推荐,无依赖冲突)

该方案无需处理依赖冲突和script标签报错问题,直接隔离Bokeh运行环境,实现成本最低。

<template>
  <div>
    <h1>Some content here</h1>
    <!-- src填写后端生成的HTML文件地址,或存储在项目静态目录的本地路径 -->
    <iframe 
      src="/path/to/your/generated/bokeh.html" 
      width="100%" 
      height="800px" 
      frameborder="0"
    ></iframe>
  </div>
</template>

<script>
export default {
  data() {
    return {}
  }
}
</script>

方案二:动态渲染HTML片段+提前加载Bokeh依赖

如果不想使用iframe,可以按以下步骤实现:

第一步:后端输出改造

调整Django生成逻辑,仅返回Bokeh渲染所需的纯DOM结构,剥离HTML中所有<script>标签,同时单独返回Bokeh渲染所需的JSON配置数据。

第二步:正确配置Bokeh依赖

之前出现Bokeh is undefined报错,通常是Nuxt SSR模式下服务端无window对象、或CDN异步加载未完成就调用Bokeh导致的,按以下方式配置即可解决:
在nuxt.config.js中配置Bokeh依赖仅在客户端加载:

export default {
  head: {
    script: [
      {
        src: "对应你后端Bokeh版本的官方CDN地址",
        mode: "client"
      }
    ]
  }
}

注:前端Bokeh依赖版本必须和后端Django安装的Bokeh版本完全一致,否则会出现渲染异常

第三步:组件内实现渲染逻辑

<template>
  <div>
    <h1>Some content here</h1>
    <!-- client-only避免SSR阶段报错 -->
    <client-only>
      <div ref="bokehContainer" v-html="bokehHtml"></div>
    </client-only>
  </div>
</template>

<script>
export default {
  data() {
    return {
      bokehHtml: ''
    }
  },
  async mounted() {
    // 等待Bokeh加载完成
    await this.waitForBokeh()
    // 请求后端返回的DOM结构
    const htmlRes = await fetch('/api/your-bokeh-html-api')
    this.bokehHtml = await htmlRes.text()
    // 请求后端返回的Bokeh渲染配置JSON
    const configRes = await fetch('/api/your-bokeh-config-api')
    const bokehConfig = await configRes.json()
    // 执行Bokeh渲染
    Bokeh.embed.embed_items(bokehConfig)
  },
  methods: {
    // 轮询检测Bokeh是否加载完成
    waitForBokeh() {
      return new Promise(resolve => {
        if (window.Bokeh) return resolve(window.Bokeh)
        const timer = setInterval(() => {
          if (window.Bokeh) {
            clearInterval(timer)
            resolve(window.Bokeh)
          }
        }, 100)
      })
    }
  }
}
</script>

注意事项

  • 不要直接将包含<script>标签的完整HTML通过v-html渲染,Vue不会执行v-html内的脚本,同时存在XSS安全风险

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 18:09:04