找不到 Django 管理和 wagtail 静态文件
Django admin and wagtail static files not found
我有一个 Django 站点,其中集成了 wagtail 和 puput,以及 whitenoise 处理静态文件。出于某种原因,在生产中,静态文件适用于常规站点,但不适用于 django 管理员或 wagtail 管理员。
urlpatterns = [
path('admin/', admin.site.urls),
path('accounts/', include('allauth.urls')),
path('', views.home, name='home'),
path('clubs/', include('clubs.urls', namespace="clubs")),
path('members/', include('members.urls', namespace="members")),
path('videos/', include('videos.urls', namespace="videos")),
path('cms/', include(wagtailadmin_urls)),
path('documents/', include(wagtaildocs_urls)),
path('blog/', include(wagtail_urls)),
path('posts/', include(puput_urls)),
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
settings.py
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static'),
]
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
STATIC_URL = '/static/'
STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'
文件夹结构
staticfiles/
admin/
wagtailadmin/
...
使用 whitenoise 时,您不需要将静态路径添加到您的 urlpatterns。它的配置通过添加 middleware.
来处理
此外,为此目的使用 django.views.static.serve()
(看起来这就是您在示例中所做的)是 not suitable for production。文档指出
This helper function works only in debug mode
这可能与您遇到的问题有关。
好的,我发现了问题,它出在我的 nginx 设置中。我使用的是 root 指令而不是别名。这意味着它在路径中添加 /static,因此它在原始静态文件夹中获取文件,而不是静态根目录,即 /staticfiles。所以而不是这个
location /static/ {
root /home/web/capclub;
}
应该是
location /static/ {
alias /home/web/capclub/staticfiles;
}
我有一个 Django 站点,其中集成了 wagtail 和 puput,以及 whitenoise 处理静态文件。出于某种原因,在生产中,静态文件适用于常规站点,但不适用于 django 管理员或 wagtail 管理员。
urlpatterns = [
path('admin/', admin.site.urls),
path('accounts/', include('allauth.urls')),
path('', views.home, name='home'),
path('clubs/', include('clubs.urls', namespace="clubs")),
path('members/', include('members.urls', namespace="members")),
path('videos/', include('videos.urls', namespace="videos")),
path('cms/', include(wagtailadmin_urls)),
path('documents/', include(wagtaildocs_urls)),
path('blog/', include(wagtail_urls)),
path('posts/', include(puput_urls)),
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
settings.py
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static'),
]
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
STATIC_URL = '/static/'
STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'
文件夹结构
staticfiles/
admin/
wagtailadmin/
...
使用 whitenoise 时,您不需要将静态路径添加到您的 urlpatterns。它的配置通过添加 middleware.
来处理此外,为此目的使用 django.views.static.serve()
(看起来这就是您在示例中所做的)是 not suitable for production。文档指出
This helper function works only in debug mode
这可能与您遇到的问题有关。
好的,我发现了问题,它出在我的 nginx 设置中。我使用的是 root 指令而不是别名。这意味着它在路径中添加 /static,因此它在原始静态文件夹中获取文件,而不是静态根目录,即 /staticfiles。所以而不是这个
location /static/ {
root /home/web/capclub;
}
应该是
location /static/ {
alias /home/web/capclub/staticfiles;
}