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错误呢