为什么 django admin 静态文件无法加载

问题描述 投票:0回答:3

自从我开始使用 Django 以来,我正在解决一些荒谬的问题。最近,当我启动一个新项目并在服务器上运行它时,Django 的管理 CSS 未加载。我在服务器上运行的最后一个项目,过了一会儿就没事了,真正的 Django 管理模板就在那里,CSS 已加载并且可以正常工作。但这一次又发生了同样的问题,我不知道如何解决它,因为该项目这里是照片是原始的,没有特殊的代码。 我不知道是不是Chrome的问题,但是我在其他浏览器上尝试过,也是一样的情况。

如果你能帮助我,我会很高兴

python django admin
3个回答
3
投票

我找到的答案是将settings.py中的

STATIC_URL = 'static/'
更改为
STATIC_URL = '/static/'
。只有一个“/”可能会改变您的整个管理外观。这个问题可能不会发生在每个人身上,但在 Pycharm 中运行代码时,我已经解决这个问题很长时间了。


1
投票

如果这个问题发生在本地,那么只需更改你的settings.py

DEBUG = True
#...
#...
STATIC_ROOT = YOUR_STATIC_ROOT_DIRECTORY

然后运行collectstatic,确保您有一个正确的

STATIC_ROOT
目录,该目录也在您的
settings.py
文件中

python manage.py collectstatic

如果您已将应用程序部署在生产服务器上,则必须遵循某些操作才能获取样式表和 javascript 文件。

首先 在您的

urls.py
中,您需要添加此代码

urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) + \
               static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

然后你必须使用第三方媒体文件服务器(CDN),例如AWS S3,或者你可以从Django服务器提供你的css、js或媒体文件 如果您不想使用 AWS S3,那么您可以使用 django 应用程序发送 css/js(这并不理想),或者您可以使用 nginx 或 apachee 发送您的 css/js

Nginx 发送js/css 您必须添加一个可由您的 django 应用程序访问的静态和媒体文件根,我通常使用

/var/www/
从任何 Linux 服务器提供静态和媒体服务

STATIC_ROOT = '/var/www/static'
MEDIA_ROOT = 'var/www/media'

那么如果你使用的是nginx

server {
    server_name domainname.com;

    access_log off;

    location /static/ {
        root /var/www/static;
    }
    location /media/ {
        root /var/www/media;
    }

如果仍然无法正常工作,那么您的 django 应用程序可能无法使用给定的 static_root 和媒体目录,请确保您的应用程序可以访问它们

如果你想从 django 应用程序发送 js/css (最好不要在生产中这样做) 然后

安装

whitenoise

pip install whitenoise

在您的设置文件中

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

0
投票

如果您正在使用 NGINX 或 Caddy 运行 Django + Gunicorn,并且确定您的配置正确,则需要检查的一件事是您正在连接到 NGINX / Caddy 而不是 Gunicorn 本身。

即如果你连接到 localhost:8000/admin,你就连接到了gunicorn,你不会得到CSS/静态文件。连接到 localhost/admin

离开几个月后回到 django 项目,我花了几个小时苦苦思索这个问题。

© www.soinside.com 2019 - 2024. All rights reserved.