【问题标题】:why django admin template doesn't load为什么 django 管理模板不加载
【发布时间】:2022-01-29 21:37:19
【问题描述】:

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

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

【问题讨论】:

  • Django 不在生产环境中提供媒体/静态文件 (DEBUG = False)。您需要配置 nginx/apache 以在那里提供静态/媒体文件。
  • 我猜你没有正确指定css文件路径。

标签: python django admin


【解决方案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',
  # ...
]

【讨论】:

  • 只有当您想通过 python 应用程序提供静态文件时才需要 Whitenoise(提示:您通常不希望这样做)。只需运行collectstatic,设置STATIC_ROOTMEDIA_ROOT,然后从上面的nginx 配置中复制粘贴location 块。
  • 是的,你是对的,我的错。
  • 你知道,我的项目完全是原始的!每当我开始一个新的时候就会出现这个问题,有趣的是没有特殊的代码,甚至还没有创建静态文件和文件夹。我的主要问题是,如果我创建 HTML 文件并给它们一个样式,它可以工作,但管理面板仍然是原来的样子,而且很难使用!
  • urlpatterns += ... 也仅在从 Django 提供静态文件时才需要。
猜你喜欢
  • 2014-08-19
  • 2012-09-13
  • 2021-01-27
  • 1970-01-01
  • 2018-03-06
  • 1970-01-01
  • 2013-08-22
  • 2019-05-02
  • 2010-11-06
相关资源
最近更新 更多