如何使用默认视图将样式表和图像包含到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
。在每个其他页面上,静态文件都可以很好地提供。
更新:在DEBUG = False
中设置settings.py
之后,所有其他网页上的静态文件也会停止投放。
答案 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}),