8

我想在我404/500制作的自定义页面上使用一些自定义 CSS 和图像。不过,Django 并未STATIC_URL在这些页面中包含该变量。

实现这一目标的最佳方法是什么?我还尝试制作自定义404/500视图并渲染任意 HTML 文件,但效果并不理想。

4

3 回答 3

18

这是我的做法:

# urls or settings
handler500 = 'mysite.views.server_error'

# views
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, '500.html')
    response.status_code = 500
    return response

值得一提的是 Django 默认不这样做的原因:

“默认的 500 视图不向 500.html 模板传递任何变量,并使用空的 Context 进行渲染,以减少出现其他错误的机会。”</p>

-- Adrian Holovaty,Django 文档

于 2013-02-27T20:37:34.913 回答
2

我遇到了同样的问题,并找到了一个不需要自定义模板或处理程序的解决方案。从 Django 1.4 开始,您可以使用标签 get_media_prefix 和 get_static_prefix 在 MEDIA_URL 和 STATIC_URL 不在上下文中时访问它们。

在我的特殊情况下(Django 1.5),我想访问我的页面 500.html 中的一些静态图像。我刚刚在模板的开头添加了

{% load static %} 

然后获取带有这些标签的媒体和静态网址

<img src="{% get_media_prefix %}logo.png">
<img src="{% get_static_prefix %}img/error_pages/error.png" style="height:235px;">

你可以在这里找到官方文档:https ://docs.djangoproject.com/en/1.5/ref/templates/builtins/#get-static-prefix

于 2013-09-06T14:00:14.063 回答
-1

我相信您只需要覆盖默认的 404/500 错误处理。这应该让你开始:

http://docs.djangoproject.com/en/dev/topics/http/views/#customizing-error-views

于 2013-02-27T20:32:46.630 回答