【问题标题】:Django admin interface missing css styling in productionDjango 管理界面在生产中缺少 css 样式
【发布时间】:2021-10-14 04:55:21
【问题描述】:

用户界面运行良好,所有 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)

【问题讨论】:

  • 我在尝试托管我的 Django 应用程序时遇到了同样的问题。最后只是找到了管理 css 文件并将它们与其余的静态文件一起粘贴。因此,如果所有其他方法都失败了,您可以选择。
  • 感谢您的解决方法!将保留它作为最后一个子弹:)
  • @MarkoBorković 从昨天开始我一直在这样做,但是只有很多静态文件需要手动复制粘贴。我有 Summernote 所见即所得的编辑器,里面有很多小的 SVG 图标和其他东西,所以它变得非常不切实际。
  • 你使用的是什么版本的 Django,你可以发布你的 urls.py 文件吗?
  • @OmarSiddiqui 好的,请查看添加的编辑。

标签: django nginx deployment


【解决方案1】:

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

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

然后重新运行python manage.py collectstatic。这在过去对某些人有效

【讨论】:

  • 所以,我尝试在生产服务器中将staticfiles 更改为static,然后运行python manage.py collectstatic,但出现此错误:SystemCheckError: System check identified some issues: ERRORS: ?: (staticfiles.E002) The STATICFILES_DIRS setting should not contain the STATIC_ROOT setting.
  • @omar,你错了!静态根目录和静态目录不应该相同:)
【解决方案2】:

您能否尝试以下步骤并告诉我它是否有效?

在 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

【讨论】:

  • 成功了!您能否对您在答案中提供的代码添加一些解释?
  • 如果我将您建议的更改应用于本地主机上的本地 settings.py 文件,它确实会删除静态文件,但这是一个不同的问题。
  • 我为你添加一个小解释@multigoodverse。如果您需要更多详细信息,请告诉我。
【解决方案3】:

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

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

之后别忘了重启 nginx。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-29
    • 2011-11-06
    • 2015-12-12
    • 1970-01-01
    • 2020-06-08
    • 2012-10-26
    • 2020-08-03
    • 2019-08-31
    相关资源
    最近更新 更多