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

mul*_*rse 4 deployment django nginx

用户界面运行良好,所有 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')
Run Code Online (Sandbox Code Playgroud)

这是我的 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;
    }
Run Code Online (Sandbox Code Playgroud)

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

0 static files copied to '/home/MYUSERNAME/myproject/staticfiles', 255 unmodified.
Run Code Online (Sandbox Code Playgroud)

之后我重新启动了 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)
Run Code Online (Sandbox Code Playgroud)

Sab*_*bil 8

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

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

STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
Run Code Online (Sandbox Code Playgroud)

从 settings.py 中删除以下行:

STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static'), ]
Run Code Online (Sandbox Code Playgroud)

在生产中执行以下命令:

python manage.py collectstatic
Run Code Online (Sandbox Code Playgroud)

更新 nginx 文件,如下所示:

# prevent css, js files sent as text/plain objects
include /etc/nginx/mime.types;

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

说明:

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

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