0

如何使用默认视图将样式表和图像包含到404页面模板中?Django:404模板中的静态文件

我创建了一个404.html文件在网站的templates目录的根目录:

<!DOCTYPE html> 
<html> 
<head> 
    {% load static %} 
    <link rel="stylesheet" href="{% get_static_prefix %}css/404.css" /> 
</head> 
<body class="page-404"> 
    <p>Not found.</p> 
</body> 
</html> 

讽刺的是,404.css找不到。 404.css文件位于其中一个应用程序的“static”目录中。

服务器是manage.py runserver。在其他每个页面上,静态文件都可以正常使用。

更新:在settings.py中设置DEBUG = False之后,似乎也停止提供所有其他页面上的静态文件。

+0

您使用Django的哪个版本? 1.3? –

+0

@Arthur Neves,1.3,是的。 – katspaugh

回答

2

看来,staticfiles应用程序确实与DEBUG = False一起使用。只有它不会从各个应用程序的目录中获取文件。它将提供来自全球STATIC_ROOT目录(来自settings.py)的文件。

以获取静态文件复制到STATIC_ROOT,你需要运行collectstatic command

python manage.py collectstatic 
0

由于contest_processor.static是在TEMPLATE_CONTEXT了!你可以使用变量STATIC_URL在你的模板:遵循DOC:

https://docs.djangoproject.com/en/1.3/ref/templates/api/#django-core-context-processors-static

如果TEMPLATE_CONTEXT_PROCESSORS包含了这个处理器,每个RequestContext将包含变量STATIC_URL,提供STATIC_URL设置的值。

return http.HttpResponseNotFound(t.render(RequestContext(request, {'request_path': request.path}))) 

所以只需使用{{ STATIC_URL }}在您的模板,它应该工作:

而且我们也知道,404视图处理程序使用RequestContext对象,遵循代码django.views.defaults.py了!

+0

谢谢!我必须提到我正在使用'django.contrib.staticfiles',它不能与'DEBUG = False'一起使用。如果您将'DEBUG'设置为'True',则404模板将不会呈现。无论如何,'{%get_static_prefix%}'等同于{{STATIC_URL}}'。 – katspaugh

0

当我使用DEBUG = True时,我通常在我的根URL配置这个片段:

(r'^static/(?P<path>.*)$', 'django.views.static.serve', 
    {'document_root': settings.STATIC_ROOT}),