如何更新 Wagtail 静态文件,当我使用 STATIC_DIRS 时它们停止工作

How to update Wagtail static files, they stopped working when I used STATIC_DIRS

我正在尝试将 Wagtail 从 2.8 版更新到最新的 2.15 版。另外,我必须从 Django 3.0 更新到 3.2。但是,我注意到当我使用 STATICFILES_DIRS 时,Wagtail admin (2.15) 的样式变得扭曲,好像它使用的是旧版本 (2.8) 中的文件。

PROJECT_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
BASE_DIR = os.path.dirname(PROJECT_DIR)

...

STATICFILES_FINDERS = [
   'django.contrib.staticfiles.finders.FileSystemFinder',
   'django.contrib.staticfiles.finders.AppDirectoriesFinder',
]


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

STATICFILES_STORAGE = 'django.contrib.staticfiles.storage.ManifestStaticFilesStorage'

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

MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'

相反,当我删除 STATICFILES_DIRS 时,Wagtail admin 上的样式得到修复,但我项目中的所有样式都消失了。

我已经检查过了,这不是缓存。我试了好几次,不同的浏览器等等

尝试更改:

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

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

您的 STATICFILES_FINDERS 设置告诉 Django 它应该在以下位置查找静态文件:

  • FileSystemFinder 告诉它查看 STATICFILES_DIRS;
  • 中列出的任何位置
  • AppDirectoriesFinder 告诉它在 INSTALLED_APPS.
  • 中每个已注册应用程序的 static 文件夹中查找

正常情况下,STATICFILES_DIRS应该不会对Wagtail自己的静态文件产生影响。这是因为 Wagtail 的静态文件存储在组成 Wagtail 包的应用程序中,并将由 AppDirectoriesFinder 拉入 - FileSystemFinder(和 STATICFILES_DIRS)不会发挥作用。

我发现您看到的差异表明您之前通过将静态文件放置在项目的 'static' 文件夹中的某个位置来自定义 Wagtail 的 JS / CSS myproject/static/wagtailadmin/css/,覆盖内置文件。这些定制可能是针对 Wagtail 2.8 进行的,并且不会针对 Wagtail 2.15 正确运行。解决方案是从您的项目中删除这些自定义文件。