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

django_plotly_dash嵌入iframe时div标签导致仪表盘无法全屏渲染

问题根源

那个包裹iframe的额外div是django_plotly_dash自带的plotly_app inclusion tag生成的。你找到的plotly_app函数里定义了dstyle样式,该样式会传入对应的模板django_plotly_dash/plotly_app.html,用来生成带padding-bottom:10%的div,这就是仪表盘只能显示小窗口的直接原因。

解决方案

方法1:调整ratio参数(最简单)

直接在调用plotly_app时设置ratio=1,让自动生成的div的padding-bottom变为100%,刚好撑满父容器:

{% load plotly_dash %}
<div class="{% plotly_class name='report' %}" style="position:fixed; top:0; left:0; bottom:0; right:0; width:100%; height:100%; border:none; margin:0; padding:0; overflow:hidden; z-index:999999;">
    {% plotly_app name='report' initial_arguments=context ratio=1 %}
</div>

注:你原代码中嵌套的内层<div style="position:absolute,top:0">可以去掉,无需额外嵌套

方法2:CSS强制覆盖样式

如果不想修改ratio参数,可通过CSS定位并重置自动生成div的样式:

.django-plotly-dash-app-report > div {
    position: static !important;
    padding-bottom: 0 !important;
    height: 100% !important;
    overflow: visible !important;
}

将这段CSS添加到项目静态CSS文件或模板的<style>标签中即可。

方法3:自定义模板(进阶)

复制django_plotly_dash的plotly_app.html模板到你项目的templates/django_plotly_dash/目录下,修改模板内容去掉外层div:
原模板内容:

<div style="{{ dstyle }}">
  <iframe src="{{ src }}" style="{{ istyle }}" frameborder="{{ fbs }}" sandbox="{{ sandbox_settings }}"></iframe>
</div>

修改后:

<iframe src="{{ src }}" style="{{ istyle }}" frameborder="{{ fbs }}" sandbox="{{ sandbox_settings }}"></iframe>

这样调用plotly_app时就不会生成额外div,iframe会直接渲染到你自定义的容器中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 16:13:36