Django 站点正在开发中 : CSS not loading for all pages

标签 django django-templates

恐怕我在这里不知所措,我检查了一些类似的问题,但似乎都不适用。

我正在我的笔记本电脑上运行 django 开发服务器。我也用它来提供静态文件。我的静态根目录中有一个文件夹,其中包含 2 个模板的 CSS,这两个模板都称为 base.html。

这是有效的头部部分:

<head>
    <title>| Entries | Latest entries</title>
    <link rel="stylesheet" type="text/css" href="/static/css/serenity.css" />
</head>

这是一个没有的:

<head>
    <title>Latest Photo Galleries</title>
    <link rel="stylesheet" type="text/css" href="/static/css/photologue.css" />
</head>

url.py:

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

和静态 URL:

    STATIC_URL = '/static/'

STATIC_ROOT 是绝对路径。

当我查看源代码并尝试打开 css 链接时,我收到 404(未找到)

为什么 Django 为一个应用程序提供 css 文件,而不为另一个应用程序提供 css 文件? (不起作用的是照片记录模板中的一个。)

如有任何帮助,我们将不胜感激。

最佳答案

您使用staticfiles的方式有点不正确。虽然我不能告诉你到底是什么原因导致了你目前的情况,但我可以告诉你,你的方法将来会让你头疼。首先,我同意有关在 Django 服务器终端中监视请求流量的评论。查找 4xx 响应并确保请求的 URL 正确。此:/Static/css/photologue/css 有两个错误。

如果您不想进一步阅读,请删除 urls.py static.server 行并观察服务器终端。现在,这就是它的工作原理......

您的设置变量是正确的,但您可能误解了STATIC_ROOT的用途。 STATIC_URL 是静态文件的完全限定或相对 URL。 STATIC_ROOT 是最终保存所有静态文件的文件夹。 它应该是空的。 Django 负责通过 manage.pycollectstatic command 填充它。 。这个想法是 Django 项目中的每个应用程序都有自己的 static/文件夹,其中包含它所需的 js/css/image 资源。此外,Django 将为 Admin 和您使用的任何其他第三方包收集静态资源。所有这些资源都将组织到您的 STATIC_ROOT 文件夹中。假设您之前收集的文件会保留下来是不安全的。

STATIC_ROOT = '/path/to/empty/static/folder/'  # or something dynamic with os.path methods
STATIC_URL = '/static/'

在您的情况下,您的 Serenity 应用程序可能有 serenity/static/css/serenity.css ,而 photologue 有 photologue/static/css/photologue.css 。您可以将共享资源放入 base/static/ 文件夹中。

现在正确提供静态媒体。不要在 urls.py 中使用 'django.views.static.serve' 行。 Django 的 runserver自动提供静态文件。它在幕后处理收集静态行为并将所有静态 Assets 收集在一起并提供它们。在 Django 1.3 中使用这种类型的 URL 模式是不必要的,会造成困惑,并且会错误地投入生产。请记住,您的网络服务器(Apache/Nginx)提供静态 Assets 。您的 Django urls.py 文件不需要了解有关它们的任何信息。

引用模板中的静态 URL。您已在模板中硬编码了 /static/ 。这会起作用(但只是因为 STATIC_URL 是相同的值)。为了更加灵活,你有 three options .

  1. 使用href="{{ STATIC_URL }}css/photologue.css"。只要您在 TEMPLATE_CONTEXT_PROCESSORS 中包含“django.core.context_processors.static”,该变量就会出现在您的模板中。
  2. 使用模板标签:{% load static %} ... href="{% get_static_prefix %}css/photologue.css"
  3. 在 Django 中 1.4您将能够使用 {% load static from staticfiles %}... href="{% static 'css/photologue.css' %}"

值得阅读 Django 中的静态文件并了解 Django 1.4 中的更改

关于Django 站点正在开发中 : CSS not loading for all pages,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9026409/

相关文章:

python - django 中的分页 - 原始查询字符串丢失

python - 为 Django 应用程序的搜索引擎提供建议

Django wagtail 获取具有级别的页面子级

python - 类型错误 : Cart() takes no arguments

django - 在 Django 中结合 prefetch_related 和 annotate

django - 值错误 : Cannot assign : must be an instance

html - Django CSS 不工作

django url 参数包含带有命名空间的 url 之前

Django 如何从模板表中获取值?

javascript - 在Django中,如何在删除评论之前生成确认提示?