在Django中的自定义404/500页面中使用静态文件

时间:2013-02-27 20:27:56

标签: django http-status-code-404 django-staticfiles

我想在我制作的自定义404/500页面上使用一些自定义CSS和图像。但是Django在这些页面中不包含STATIC_URL变量。实现这一目标的最佳方法是什么?我也试过制作一个自定义的404/500视图并渲染一个任意的HTML文件,但它没有那么好用。

3 个答案:

答案 0 :(得分:17)

我将如何做到这一点:

# 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模板,并使用空的上下文进行渲染,以减少出现其他错误的可能性。”

     

- Adrian Holovaty, Django documentation

答案 1 :(得分: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

答案 2 :(得分:-1)

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

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