【问题标题】:Django: static files in a 404 templateDjango:404 模板中的静态文件
【发布时间】: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.css404.css 文件位于应用程序之一的 static 目录中。

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

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

【问题讨论】:

  • 您使用的是哪个版本的 Django? 1.3 ?
  • @Arthur Neves,1.3,是的。

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


【解决方案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}),
    

    【讨论】:

      猜你喜欢
      • 2017-07-04
      • 2012-09-30
      • 2020-10-17
      • 1970-01-01
      • 2013-06-18
      • 2020-12-19
      • 2014-06-07
      • 1970-01-01
      • 2013-01-23
      相关资源
      最近更新 更多