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

Azure部署Django应用:Debug=False时iframe无法加载媒体文件

Django部署Azure App Service后Debug=False时媒体文件无法在iframe加载的解决方法

核心问题在于:Django的static()辅助函数仅在DEBUG=True的开发环境中生效,当DEBUG=False进入生产模式时,该函数不会处理媒体文件的HTTP请求,导致媒体文件URL无法被正确解析。以下是针对性解决方案:

方案1:让Azure App Service直接托管媒体文件

这是生产环境下最推荐的方式,由Web服务器直接处理静态/媒体文件请求,减轻Django应用负担:

  • 登录Azure门户,进入你的App Service实例
  • 导航至「配置」>「路径映射」选项卡
  • 添加新的虚拟目录映射:
    • 虚拟路径:填写 /media
    • 物理路径:填写 site\wwwroot\media(对应本地MEDIA_ROOT部署到Azure后的实际路径)
  • 保存配置后,重启App Service使设置生效

方案2:用Whitenoise让Django处理生产环境媒体文件

适合小型应用场景,通过Whitenoise中间件实现Django对静态/媒体文件的生产级服务:

  1. 安装Whitenoise库:
    pip install whitenoise
    
  2. 修改settings.py中的中间件顺序,将Whitenoise中间件放在SecurityMiddleware之后:
    MIDDLEWARE = [
        'django.middleware.security.SecurityMiddleware',
        'whitenoise.middleware.WhiteNoiseMiddleware',  # 新增此行
        # 其余原有中间件保持不变
    ]
    
  3. 在settings.py末尾添加Whitenoise配置:
    # 配置Whitenoise服务媒体文件
    WHITENOISE_ROOT = BASE_DIR / 'media'
    STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'
    
  4. 移除urls.py中仅用于开发环境的static()媒体文件映射(因为Whitenoise会自动处理)

修正HTML中的URL生成

检查你的iframe代码:{{ MEDIA_URL }}{{ row.document.url }} 会导致URL重复拼接(Django的FileField的url属性已经包含MEDIA_URL前缀),正确写法应为:

<iframe src="{{ row.document.url }}" title="Document View" frameborder="0" width="100%" height="600px"></iframe>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 12:51:00