7

我有一个 Django 应用程序,它需要几个 JavaScript 文件。

在 Chrome 中,我收到错误“资源解释为脚本,但使用 MIME 类型文本/html 传输”。

在此处输入图像描述

AFAIK(见2)为了解决这个问题,我需要配置 Django,以便 JavaScript 文件以内容类型“application/x-javascript”返回。

我怎样才能在 Django 中做到这一点?

更新:我遵循 Daniel Roseman 的建议并找到了以下解决方案。

1)修改urls.py:

urlpatterns = patterns('',
    ...
    url(r'.*\.js$', java_script),
    ...
)

2)在views.py中添加以下函数:

def java_script(request):
    filename = request.path.strip("/")
    data = open(filename, "rb").read()
    return HttpResponse(data, mimetype="application/x-javascript")
4

6 回答 6

14

我遇到了一个问题,Django 使用包含的服务器将 javascript 文件作为文本/纯文本提供,这与 ES6 模块不太兼容。我在这里发现您可以通过在 settings.py 中添加以下行来更改文件扩展名关联:

#settings.py
if DEBUG:
    import mimetypes
    mimetypes.add_type("application/javascript", ".js", True)

和 javascript 文件现在作为application/javascript.

于 2018-12-29T06:59:31.927 回答
8

我怀疑问题不是你想的那样。可能实际发生的是根本没有提供您的 JS 文件:相反,正在发送 Django 错误页面。你需要弄清楚为什么。

于 2012-08-04T20:02:28.243 回答
0

既然这不会阻止浏览器正确解释脚本,为什么这是一个问题? runserver仅用于开发(不是生产用途),因此不是完整的 Web 服务器。

您应该继续在开发中使用它,当您转移到生产环境时,请为静态文件适当地配置您的网络服务器。

但是,如果您绝对必须使用开发服务器来提供静态文件;看看如何提供静态文件

于 2012-08-04T19:35:36.797 回答
0

对于 Django 在视图中使用请求上下文:

return render_to_response('success.html', {'object': varobject},context_instance=RequestContext(request))
于 2013-03-02T05:22:19.497 回答
0

使用将以下代码放入主项目的 settings.py 来扩展 Alexandre 的答案。之后,您将需要清除浏览器缓存(您也可以通过打开隐身窗口进行测试)以显示调试面板。

if DEBUG:
    import mimetypes
    mimetypes.add_type("application/javascript", ".js", True)
于 2021-10-19T13:02:04.093 回答
0

即使在我的 settings.py 中添加了@piephai 的解决方案后,我今天也遇到了这个错误。然后我注意到@Daniel Roseman 也做对了:我的导入路径错误,我必须将“.js”添加到所有路径中,例如:

import {HttpTool} from "./requests";变成了import {HttpTool} from "./requests.js";

在考虑如何生成静态文件的路由后才有意义。

于 2021-12-11T23:42:36.497 回答