Django开发服务器和MIME类型

时间:2013-04-30 15:04:31

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

无论如何在django开发服务器中设置MIME类型? 具体来说,我希望从Chrome开发工具中的警告中删除此消息。

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

3 个答案:

答案 0 :(得分:15)

事实证明这就像添加

一样简单
if DEBUG:
    import mimetypes
    mimetypes.add_type("image/png", ".png", True)

到settings.py

答案 1 :(得分: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类型映射,可以根据需要进行编辑。

答案 2 :(得分:0)

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()直接尝试读取文件,只是阻止其只是一个I / O包装器
  • content_type = mimetypes.guess_type(request.path)[0]执行 MIME 检测魔术[0],即需要第一个元素,因为它返回一个元组,第一个是mime类型,第二个是编码。
  • request.path在上一行传递,因为它会根据文件路径猜测 MIME 。例如,如果客户端(浏览器)请求,名为stylsheet.css的文件的文本/ css。
  • clientRequestUrl =客户端尝试向服务器请求的确切网址。