Django 管理界面在生产中缺少 css 样式

Django admin interface missing css styling in production

用户界面运行良好,所有 CSS 样式和静态文件都正确提供,但管理界面缺少 CSS 样式。我查看了类似的帖子,但在这些帖子中,人们对用户界面和管理界面都有疑问。我的问题仅与管理界面有关。

请参阅下面来自 settings.py 的静态文件设置:

STATIC_URL = '/static/'

#Location of static files
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static'), ]

STATIC_ROOT  = os.path.join(BASE_DIR, 'staticfiles')

这是我的 nginx 配置:

server {
    listen 80;
    server_name MY_SERVER_IP;

    location = /favicon.ico { access_log off; log_not_found off; }
    location /static/ {
        root /home/MYUSERNAME/myproject;
    }

    location /media/ {
        root /home/MYUSERNAME/myproject;
    }

我已经在服务器上执行了 python manage.py collectstatic 并收到此消息:

0 static files copied to '/home/MYUSERNAME/myproject/staticfiles', 255 unmodified.

之后我重新启动了 nginx,也尝试清空浏览器缓存,但问题仍然存在。

@Omar Siddiqui 要求的更多信息。 使用 Django 3.2 我的 mysite/urls.py 包含:

from django.contrib import admin
from django.urls import path, include

# Imports to configure media files for summernote editor
from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('qa.urls')),
    path('summernote/', include('django_summernote.urls')),
    path('chatbot/', include('chatbot.urls')),
]

# Enable media files for summernote editor
if settings.DEBUG:
    urlpatterns += static(settings.MEDIA_URL,
                          document_root=settings.MEDIA_ROOT)

尝试将 STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles') 更改为:

STATIC_ROOT  = os.path.join(BASE_DIR, 'static')

然后再运行python manage.py collectstatic。这在过去对某些人有用

能否请您尝试以下步骤,让我知道它是否有效?

在 settings.py 文件中应用以下更改:

STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')

从您的 settings.py 中删除以下行:

STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static'), ]

在生产中执行以下命令:

python manage.py collectstatic

更新 nginx 文件如下:

server {
    listen 80;
    server_name MY_SERVER_IP;

    location = /favicon.ico { access_log off; log_not_found off; }
    location /static/ {
        autoindex on;
        autoindex_exact_size off;
        root /home/MYUSERNAME/myproject;
    }

    location /media/ {
        autoindex on;
        autoindex_exact_size off;
        root /home/MYUSERNAME/myproject;
    }
}

说明:

  • STATIC_ROOT是之后存放静态文件的文件夹 使用 python manage.py collectstatic
  • STATICFILES_DIRS 是文件夹列表,django 将在其中搜索除安装的每个应用程序的 static 文件夹之外的其他静态文件。

在这种情况下,我们关心的是与管理员相关的 CSS 文件,这就是为什么我们使用 STATIC_ROOT 而不是 STATICFILES_DIRS

尝试将别名传递给 nginx 中的静态位置,如下所示:

location /static/ {
    alias /home/MYUSERNAME/myproject/staticfiles/
}

之后别忘了重启nginx。