Django:404 模板中的静态文件
Posted
技术标签:
【中文标题】Django:404 模板中的静态文件【英文标题】:Django: static files in a 404 template 【发布时间】:2011-12-18 06:32:06 【问题描述】:如何使用默认视图将样式表和图像包含到 404 页面模板中?
我在站点的templates
目录的根目录中创建了一个404.html
文件:
<!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
后,所有其他页面上的静态文件也停止提供服务。
【问题讨论】:
您使用的是哪个版本的 Django? 1.3 ? @Arthur Neves,1.3,是的。 【参考方案1】:看来,staticfiles
应用确实可以与DEBUG = False
一起使用。只有它不会从单个应用程序的 static
目录中获取文件。它将提供来自全局STATIC_ROOT
目录(来自settings.py
)的文件。
要将静态文件复制到STATIC_ROOT
,您需要运行collectstatic
command:
python manage.py collectstatic
【讨论】:
【参考方案2】:因为竞赛处理器.static 已经在 TEMPLATE_CONTEXT 中了!您可以在模板中使用变量 STATIC_URL:follow 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
,它应该可以工作!
【讨论】:
谢谢!我必须提到我正在使用django.contrib.staticfiles
,但它不适用于DEBUG = False
。如果将DEBUG
设置为True
,则不会呈现404 模板。无论如何,% get_static_prefix %
等价于 STATIC_URL
。【参考方案3】:
当我使用 DEBUG=True 时,我通常在我的根 urlconf 中有这个 sn-p:
(r'^static/(?P<path>.*)$', 'django.views.static.serve',
'document_root': settings.STATIC_ROOT),
【讨论】:
以上是关于Django:404 模板中的静态文件的主要内容,如果未能解决你的问题,请参考以下文章