【发布时间】: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
有没有在 django 开发服务器中设置 MIME 类型? 具体来说,我很想从 Chrome 开发工具的警告中删除这条消息。
Resource interpreted as Image but transferred with MIME type image/x-png
【问题讨论】:
标签: django mime-types google-chrome-devtools django-dev-server
原来它就像添加一样简单
if DEBUG:
import mimetypes
mimetypes.add_type("image/png", ".png", True)
到 settings.py
【讨论】:
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 类型映射的路径列表,可以根据需要进行编辑。
【讨论】:
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>')
【讨论】: