【问题标题】:Django development server and MIME typesDjango 开发服务器和 MIME 类型
【发布时间】:2013-04-24 13:30:08
【问题描述】:

有没有在 django 开发服务器中设置 MIME 类型? 具体来说,我很想从 Chrome 开发工具的警告中删除这条消息。

Resource interpreted as Image but transferred with MIME type image/x-png

【问题讨论】:

    标签: django mime-types google-chrome-devtools django-dev-server


    【解决方案1】:

    原来它就像添加一样简单

    if DEBUG:
        import mimetypes
        mimetypes.add_type("image/png", ".png", True)
    

    到 settings.py

    【讨论】:

    • 我遇到了一个问题,Django 将 javascript ES6 模块作为 text/plain 与包含的服务器一起提供,这解决了它(使用“application/javascript”和“.js”)。
    【解决方案2】:

    Django 开发服务器使用 mimetypes 模块来猜测任何给定文件的适当 MIME 类型,并且在后台,该模块根据您的操作系统使用不同的配置。

    特别是在 Windows 上,它会从注册表中的 HKEY_CLASSES_ROOT 加载内容类型(例如,用于 .js 文件的键 HKEY_CLASSES_ROOT\.js\Content Type),并且似乎此配置通常可以以您意想不到的方式设置(例如通过在文本编辑器中打开一个 javascript 文件)- 它甚至不是 Python 或 Django 特定的,因为 Go also uses the registry and is affected the same way

    修改受影响文件扩展名的注册表项应该可以解决此问题,而无需更改任何 Django 设置(但它可能是系统范围的配置更改,可能并不理想):

    Windows Registry Editor Version 5.00
    
    ; Fixing the question's issue with PNG
    [HKEY_CLASSES_ROOT\.png]
    "Content Type"="image/png"
    
    ; Fixing a common problem with Javascript files
    [HKEY_CLASSES_ROOT\.js]
    "Content Type"="text/javascript"
    

    在其他操作系统上,MIME 映射配置在大多数用户永远不会修改的文件中,因此这往往不是问题。但是,如果需要,mimetypes.knownfiles 是一个包含 MIME 类型映射的路径列表,可以根据需要进行编辑。

    【讨论】:

    • @它在 EDGE 浏览器中有所帮助,但在 Opera 中不起作用,因为一些有趣的共鸣。窗户...
    【解决方案3】:

    2020 年答案:

    如果您希望浏览器自动检测任何 mime 内容类型,这就是解决方案。

    经过多次失败的静态尝试,这是动态解决方案。

    def fetch(request):
        import mimetypes
        clientRequestUrl=os.getcwd()+'/servlet'+request.path
        try: return HttpResponse(fread(clientRequestUrl), content_type=mimetypes.guess_type(request.path)[0])
        except Exception as e: return HttpResponse(str(e)+'===> Error Thrown <br>')
    
    • 这里 fread() 直接读取文件在 try 中除了阻止它只是一个 I/O 包装器
    • content_type=mimetypes.guess_type(request.path)[0] 执行 MIME 检测魔法 [0] 即第一个元素是必需的,因为它返回一个元组,首先是 mime 类型,其次是编码.
    • request.path 在上面的行中被传递,因为它根据文件路径猜测 MIME。例如,如果客户端(浏览器)请求,则为名为 stylsheet.css 的文件的 text/css。
    • clientRequestUrl = 客户端尝试向服务器请求的确切 url。

    【讨论】:

      猜你喜欢
      • 2011-08-20
      • 1970-01-01
      • 1970-01-01
      • 2021-05-08
      • 1970-01-01
      • 2011-07-28
      • 1970-01-01
      • 1970-01-01
      • 2016-08-23
      相关资源
      最近更新 更多