0

我正在关注官方文档以提供静态文件,但我在开发控制台中收到错误 404。我正在使用 'django.contrib.staticfiles',所以应该自动提供静态文件。这是我的设置:

设置:

STATIC_ROOT = ''
STATIC_URL = '/static/'

模板标题:

{% load staticfiles %}
<link rel="stylesheet" href="{% static "css/app.css" %}">

目录树:

django_project
    \apps
    \static
        \css
            app.css
    \templates
        index.html

我可以在 Firefox 控制台中看到我的文件的路径是正确的:

在此处输入图像描述

所以问题一定是Django没有提供静态文件。我找不到我缺少的东西。任何建议都非常受欢迎。

4

4 回答 4

6

解决方案: 我的 settings.py 中缺少这一行

STATICFILES_DIRS = (os.path.join(os.path.dirname(__file__),'static'),)

它看起来是强制性的,与 TEMPLATE_DIRS 相同。

于 2014-10-27T03:57:10.040 回答
0

当您运行 collectstatic 时,它会将所有静态内容放在 STATIC_ROOT 指定的路径中。检查部署到生产文档

如果您使用的是 django 服务器,请尝试检查由 {% static %} 生成的路径...您可能有一些尾部斜杠或缺少某些东西。

检查您是否符合所有要求。您需要在已安装的应用程序中包含 django.contrib.staticfiles,并在主 urls 文件中包含类似的内容:

from django.conf import settings
from django.conf.urls.static import static

urlpatterns = patterns('',
    # ... the rest of your URLconf goes here ...
) + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
于 2014-10-27T03:25:44.340 回答
0

那应该工作:)

设置.py

STATIC_URL = '/static/'
STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'project', "static"),
)

来自 settings.py 的 context_processors 示例:

TEMPLATE_CONTEXT_PROCESSORS = (
    "django.contrib.auth.context_processors.auth",
    "django.core.context_processors.debug",
    "django.core.context_processors.i18n",
    "django.core.context_processors.media",
    "django.core.context_processors.static",
    'django.core.context_processors.request',
    "django.core.context_processors.tz",
    "django.contrib.messages.context_processors.messages",
)

settings.py 中已安装应用的示例:

INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
)

网址.py:

from django.conf import settings
from django.conf.urls.static import static
if settings.DEBUG:
    urlpatterns + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
于 2014-10-27T06:41:49.183 回答
0

对于运行 django-cms 并遇到 404 错误的任何人(特别是,您的所有静态文件都在 URL 前加上“en-us”),我发现以下步骤可以提供帮助。

首先,在 urls.py 文件中关闭模式匹配的国际化,如下所述

urlpatterns = i18n_patterns('',
      url(r'^admin/', include(admin.site.urls)),
      url(r'^', include('cms.urls')),
)

应该改为:

from django.conf.urls import patterns

urlpatterns = patterns('',
  url(r'^admin/', include(admin.site.urls)),
  url(r'^', include('cms.urls')),
)

导入很重要,因为 django-cms 的配置删除了patternsdjango.conf.urls.

这解决了重定向,但它仍然没有找到我的静态文件。我需要手动将静态 url 添加到 url 模式中,如下所示:

urlpatterns = patterns('',
    url(r'^admin/', include(admin.site.urls)),
    url(r'^', include('cms.urls')),
) + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

之后,静态文件按预期工作。

我敢肯定,这可能与我作为 Django 新手搞砸了我的配置有关。但由于其他人可能有同样的问题,我把它作为一个可能的解决方案,如果不太理想的话。

于 2015-06-11T20:07:49.707 回答