【问题标题】:Django Will Not Pull CSS Static File (404 Error) Even Though File Paths Look Correct即使文件路径看起来正确,Django 也不会提取 CSS 静态文件(404 错误)
【发布时间】:2016-11-19 21:38:36
【问题描述】:

当我加载本地站点时,我无法加载 CSS 文件。我正在运行 Django 1.9 和 python 3.4.2。

这是我的结构:

apps/
    app1/
    app2/
    etc.
clients/
    media/ #css, js, images, etc.
    static/ #static files
    templates/ #html templates
__init__.py
manage.py
settings.py
etc.

在我的 settings.py 文件中,我有:

STATIC_ROOT = os.path.join(BASE_DIR, 'clients', 'static')
STATIC_URL = 'clients/static/'
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'clients', 'media'),
]
MEDIA_ROOT = os.path.join(PROJECT_PATH, 'clients', 'media')

我调用 css 文件的 html 模板是这样的:

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

我继续收到 404 错误,说它在以下位置找不到 css 文件:/clients/static/css/primary_stylesheet.css

在我的 settings.py 文件中,我打印了我的 STATICFILES_DIRS 和 STATIC_ROOT,它们都直接指向了它们应该指向的位置。我已经阅读了文档并尝试了 DIRS 和 ROOT 的多种变体,但不明白为什么 css 文件没有正确提取 - 甚至“collectstatic”也正确收集。

我非常感谢其他人必须给予的任何帮助和智慧。

谢谢!

【问题讨论】:

  • 您确定文件/clients/media/css/primary_stylesheet.css 存在吗?当您运行collectstatic 时,您是否验证了/clients/static/css/primary_stylesheet.css 存在?
  • 请同时添加您的STATICFILES_FINDERS 设置。
  • @YPCrumble 是的,我确信 /clients/media/css/primary_stylehseets.css 存在。如果我从 /static/ 文件中删除 CSS 文件,然后再次收集静态文件,则该文件会在 /static/css/ 中正确更新
  • @YPCrumble 目前我没有列出任何 STATICFILES_FINDERS 设置...这是要求吗?
  • 你用什么服务器来服务这个 django 应用程序?

标签: django


【解决方案1】:

如果您设置了DEBUG = True,那么 django 实际上不会从/static/ 文件夹中提取您的文件——当您输入runserver 命令时,它会在运行时查找并收集您的静态文件。

我想您会发现,如果您使用 STATICFILES_FINDERS 的默认设置,您的应用将能够提供您的文件:

STATICFILES_FINDERS = [
    'django.contrib.staticfiles.finders.FileSystemFinder',
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
]

【讨论】:

  • 感谢您的回答。我添加了 'STATICFILES_FINDERS = [django.contrib.staticfiles.finders.FileSystemFinder,]' 并且我的媒体文件仍未加载。我没有将“...AppDirectoriesFinder”添加到数组中,因为我的印象是它不会影响任何事情,因为我要收集的静态文件不在应用程序内。我今晚会尝试添加它,看看是否有任何变化......
  • @Tarrant 仍然必须是 STATICFILES_FINDERSS
  • 抱歉拼写错误 - 已更新!
  • 是的,无论出于何种原因,将 'django.contrib.staticfiles.finders.AppDirectoriesFinder' 添加到我的 STATICFILES_FINDERS 数组都有效。感谢您的帮助,我很感激!
【解决方案2】:

如果您使用python ./manage.py runserver 运行服务器,则需要为staticmedia 文件设置网址,请查看:https://docs.djangoproject.com/en/1.9/howto/static-files/#serving-static-files-during-development

当我开始一个新项目时,我一般会这样设置我的urls.py

from django.conf import settings
from django.conf.urls.static import static
from django.conf.urls import url, include
from django.contrib import admin

url_patterns = [
    url(r'^admin/', admin.site.urls),
    # your url patterns go here
]

if settings.DEBUG:
    urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

这需要您在settings.py 中设置STATIC_ROOTSTATIC_URLMEDIA_ROOTMEDIA_URL

STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'static_files'),
]
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
STATIC_URL = '/static/'

MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'

【讨论】:

  • 今晚我会尝试包含 ga MEDIA_URL 并添加 'if setting.DEBUG:...' 并让您知道是否可以解决问题。
  • 仅供参考,这并没有解决问题,但我仍然感谢网址建议!
猜你喜欢
  • 2021-11-25
  • 1970-01-01
  • 2020-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-16
  • 2018-05-24
  • 1970-01-01
相关资源
最近更新 更多