Django:404模板中的静态文件

时间:2011-10-30 16:26:35

标签: python django django-templates static-files django-staticfiles

如何使用默认视图将样式表和图像包含到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.css404.css文件位于其中一个应用的static目录中。

服务器为manage.py runserver。在每个其他页面上,静态文件都可以很好地提供。

更新:在DEBUG = False中设置settings.py之后,所有其他网页上的静态文件也会停止投放。

3 个答案:

答案 0 :(得分:2)

看来,staticfiles app适用于DEBUG = False。只有它不会从单个应用程序的static目录中获取文件。它将提供来自全局STATIC_ROOT目录(来自settings.py)的文件。

要将静态文件复制到STATIC_ROOT,您需要运行collectstatic command

python manage.py collectstatic

答案 1 :(得分: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设置的值。

我们也知道404视图处理程序使用RequestContext对象,请遵循django.views.defaults.py中的代码:

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

所以,只需在模板中使用{{ STATIC_URL }},它就应该有用了!

答案 2 :(得分:0)

当我使用DEBUG = True时,我通常在我的root urlconf中有这个片段:

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