2013-02-27 34 views
7

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

回答

14

这是我会怎么做:

# 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

+0

那么我将如何引用我的静态文件? – heri0n 2013-02-27 20:49:58

+1

这会将“STATIC_URL”添加到模板的上下文中。所以你可以像平常一样使用它。 – Matt 2013-02-27 20:50:45

2

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

在我的特殊情况下(Django 1.5),我想访问我的页面500.html中的一些静态图像。我只是说在模板

{% load static %} 

的开始,然后得到媒体和静态URL,这些标签

<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

相关问题