恐怕我在这里不知所措,我检查了一些类似的问题,但似乎都不适用。
我正在我的笔记本电脑上运行 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 .
- 使用
href="{{ STATIC_URL }}css/photologue.css"
。只要您在 TEMPLATE_CONTEXT_PROCESSORS 中包含“django.core.context_processors.static”,该变量就会出现在您的模板中。 - 使用模板标签:
{% load static %} ... href="{% get_static_prefix %}css/photologue.css"
- 在 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/