Django 在自定义 404 页面上传输具有 MIME 类型 text/html 的样式表

Posted

技术标签:

【中文标题】Django 在自定义 404 页面上传输具有 MIME 类型 text/html 的样式表【英文标题】:Django transferring stylesheet with MIME type text/html on custom 404 page 【发布时间】:2014-08-20 03:44:58 【问题描述】:

我正在为我的网站设计一个使用 Django 构建的自定义 404 页面,但我遇到了与 404.html 关联的样式表的问题。

我在 settings.py 中设置 DEBUG = False 以查看我的自定义 404 页面,并将“*”添加到 ALLOWED_HOSTS。

然后我用这一行更改了 urls.py:

handler404 = 'site.views.custom_404'

在views.py中:

def custom_404(request):
    return render_to_response("site/404.html", context_instance=RequestContext(request))

现在当我在本地获取 404 页面时,我看到了我在 404.html 中编写的 html,但是样式表 style.css 不起作用。我在控制台中收到此消息:

Resource interpreted as Stylesheet but transferred with MIME type text/html:
http://127.0.0.1:8000/site/static/style.css

我网站上的所有其他页面仍然具有与 style.css 关联的正确样式,除了这个新的 404 页面。

我尝试将其添加到 settings.py,但没有任何改变:

if DEBUG:
    import mimetypes
    mimetypes.add_type("text/css", ".css", True)

【问题讨论】:

【参考方案1】:

您是否在 settings.py 中定义了静态文件?

我猜你在安装的应用程序中有“django.contrib.staticfiles”。 你可以这样定义:

import os.path

PROJECT_ROOT = os.path.abspath(os.path.dirname(__file__))

STATICFILES_DIRS = (
    os.path.join(PROJECT_ROOT, 'static'),
)

在您的网址或设置中执行此操作:

custom_404 = "mysite.views.server_error"

在视图中:

from django.shortcuts import render

def server_error(request):
    # one of the things ‘render’ does is add ‘STATIC_URL’ to
    # the context, making it available from within the template.
    response = render(request, "404.html")
    response.status_code = 404
    return response

【讨论】:

是的,我一直使用 STATIC_URL 来访问图像,但我尝试按照您的建议更改视图,现在我的样式表可以正常工作,但我的所有图像都出现 404 not found 错误 ** 除了 200(表示“OK”)之外,还有许多常见 HTTP 状态代码的 HttpResponse 子类。您可以在request/responsedocumentation 中找到可用子类的完整列表。只需返回其中一个子类的实例而不是普通的 HttpResponse 以表示错误** mor info in:docs.djangoproject.com/en/dev/topics/http/views/…

以上是关于Django 在自定义 404 页面上传输具有 MIME 类型 text/html 的样式表的主要内容,如果未能解决你的问题,请参考以下文章

为啥jsp页面在root下可以显示,而在自定义应用目录下提示Http404错误呢

如何在自定义页面 Django 中使用管理表单

在 Django 网站上找不到页面 404?

在自定义管理页面中显示正确的 django 身份验证框架信息

404错误处理:重定向还是直接404?(摘录)

如何在 django 中自定义找不到页面(404)?