【问题标题】:Django - CSS File Not Loading In Production (Debug: False)Django - CSS 文件未在生产中加载(调试:False)
【发布时间】:2018-06-24 21:04:32
【问题描述】:

当前错误 (Debug=False)

"[16/Jan/2018 15:18:42] "GET /static/style.css HTTP/1.1" 404 90"

网站加载但格式损坏,因为 CSS 文件未加载

日志记录:

在 CMD 提示符下显示

"[16/Jan/2018 15:49:05] "GET /beginners/ HTTP/1.1" 200 3760
[16/Jan/2018 15:49:05] "GET /static/style.css HTTP/1.1" 404 90
"

我不确定为什么这不起作用:我的 style.css 位于我的静态文件夹中,而静态文件夹与 manage.py 是同一文件夹

当我设置 Debug = True 时,我重新加载页面并且它工作正常 - 我的静态文件夹处于活动状态并且我没有收到静态错误:

[16/Jan/2018 15:58:11] "GET /beginners/? HTTP/1.1" 200 3759
[16/Jan/2018 15:58:11] "GET /static/style.css HTTP/1.1" 200 5014

请帮忙!!

STATIC_URL = '/static/'
PROJECT_DIR = os.path.dirname(os.path.abspath(__file__))
STATIC_ROOT = os.path.join(PROJECT_DIR, 'static')
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'static'),
]

DEBUG = True

ALLOWED_HOSTS = ['127.0.0.1']

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

【问题讨论】:

  • 你是如何运行服务器的?是用manage.py runserver 吗?当 debug 为 False 时,django 将不会提供静态内容。您需要使用网络服务器来提供静态文件
  • @at14 是的,manage.py,哦,我不知道..哇...谢谢,
  • @at14 添加这个回答,我会给你最好的答案
  • 在您的项目中实现此代码:访问此链接:stackoverflow.com/questions/66132733/…>

标签: python django server


【解决方案1】:

您正在使用 Django 的开发服务器,Debug=False。当 Debug 为 False 时,Django 不会提供静态内容。

Django 开发服务器不打算在生产中使用。

您将需要一个 Web 服务器来提供您的静态内容(或将其放在 CDN 上)

与 Django 一起使用的常见部署样式是

nginx -> uwsgi -> django


apache -> mod_wsgi -> django


还有gunicorn,相对容易设置。

【讨论】:

  • 非常感谢,将进一步研究这些 :)
【解决方案2】:

默认情况下,当 DEBUG = False 在生产环境中,django 不会提供静态文件。

改变这种行为

部署您的应用程序后,您需要运行 python manage.py collectstatic 将所有静态文件放入 STATIC_ROOT。

我介绍了 Whitenoise,它允许您的 Web 应用程序提供自己的静态文件。它适用于任何 WSGI 兼容的应用程序。

要安装它运行:

pip install whitenoise

编辑您的 settings.py 文件并将 WhiteNoise 添加到 MIDDLEWARE_CLASSES 列表中,高于除 Django 的 SecurityMiddleware 之外的所有其他中间件:

MIDDLEWARE = [
  'django.middleware.security.SecurityMiddleware',
  'whitenoise.middleware.WhiteNoiseMiddleware',
  # ...
]

保存并重启你的服务器

最后,如果您想要 gzip 功能,请将其添加到您的 settings.py

STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'

保存并重启

【讨论】:

    【解决方案3】:

    上面的答案并不完全正确......还有另一种方法!花了我很长时间才弄清楚:(

    第 1 步:如果您正在/正在使用它们,请确保删除所有 WhiteNoisedjango_heroku 的痕迹:来自导入、INSTALLED_APPS、虚拟环境等。

    第 2 步:

    STATIC_URL = '/static/'
    STATICFILES_STORAGE = 'django.contrib.staticfiles.storage.StaticFilesStorage'
    STATICFILES_DIRS = [
        os.path.join(BASE_DIR, "path/to/other/static/dir"),
    ]
    

    对我来说,关键是使用由 STATICFILES_STORAGE 设置的正确存储引擎。 你不需要设置 STATIC_ROOT 因为引擎会为你生成根。更多信息请参见此处的警告部分:https://docs.djangoproject.com/en/1.11/ref/settings/#std:setting-STATIC_ROOT

    DEBUG = False 
    ALLOWED_HOSTS = ['127.0.0.1']
    

    最后

    $ python manage.py collectstatic
    $ python manage.py runserver
    

    如果这没有帮助,请不要忘记记录:With DEBUG=False, how can I log django exceptions to a log file

    这种帮助:https://docs.djangoproject.com/en/1.11/howto/static-files/

    【讨论】:

      猜你喜欢
      • 2011-08-02
      • 1970-01-01
      • 1970-01-01
      • 2020-08-24
      • 2014-08-17
      • 2021-05-24
      • 2021-06-28
      • 2019-03-06
      • 2023-03-03
      相关资源
      最近更新 更多