【问题标题】:In Django, whitenoise do not show static files?在 Django 中,whitenoise 不显示静态文件?
【发布时间】:2021-11-03 17:03:05
【问题描述】:

我正在尝试在debug=false 时显示静态文件。我正在使用白噪声库,但网站仍然不显示静态文件和媒体文件。我的 settings.py 文件是这样的:

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'whitenoise.middleware.WhiteNoiseMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
STATICFILES_STORAGE = 'whitenoise.storage.CompressedStaticFilesStorage'

STATIC_URL = '/static/'
STATIC_DIR = os.path.join(BASE_DIR, 'static')
STATICFILES_DIRS = [

    os.path.join(BASE_DIR, "static")
]


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


LOGIN_REDIRECT_URL = '/'
LOGOUT_REDIRECT_URL = '/'

网址.py:

urlpatterns = [
    path('admin/', admin.site.urls),
   path('',include('games.urls')),
  path('sitemap.xml', sitemap, {'sitemaps': sitemaps}, name='django.contrib.sitemaps.views.sitemap'),
    path('sentry-debug/', trigger_error),
    path('ajax_calls/search/', autocompleteModel),
   path('accounts/', include('allauth.urls')),
]+static(settings.MEDIA_URL,document_root=settings.MEDIA_ROOT)

【问题讨论】:

  • 您是否在urls.py 中指定了媒体/静态网址?
  • 您也可以在已安装的应用中添加这个whitenoise.runserver_nostatic
  • @WillemVanOnsem 我的 urls.py 文件如下:urlpatterns = [ path('admin/', admin.site.urls), path('',include('games.urls')), path('sitemap.xml', sitemap, {'sitemaps': sitemaps}, name='django.contrib.sitemaps.views.sitemap'), path('sentry-debug/', trigger_error), path('ajax_calls/ search/', autocompleteModel), path('accounts/', include('allauth.urls')), ]+static(settings.MEDIA_URL,document_root=settings.MEDIA_ROOT)

标签: django django-rest-framework whitenoise


【解决方案1】:

你有没有收集你的静态文件夹

python manage.py collectstatic

在你的主要项目中 urls.py

 url(r'^media/(?P<path>.*)$', serve,{'document_root': settings.MEDIA_ROOT}),
    url(r'^static/(?P<path>.*)$', serve,{'document_root': settings.STATIC_ROOT}),
]
if settings.DEBUG:
    urlpatterns += static(settings.STATIC_URL, document_root = settings.STATIC_ROOT)
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

【讨论】:

    【解决方案2】:

    WhiteNoise 与 django 一起使用:

    1. 确保静态文件配置正确

    在项目settings.py文件集中

    STATIC_ROOT = BASE_DIR / '静态文件' 这个 staticfiles 文件夹将是 collectstatic 提取所有静态文件的文件夹。

    1. 启用白噪声 一直在settings.py:

      中间件 = [

       'django.middleware.security.SecurityMiddleware',
      
       'whitenoise.middleware.WhiteNoiseMiddleware',
       # ...
      

      ]

    注意:WhiteNoise middleware 应该直接放在Django SecurityMiddleware 之后(如果您正在使用它)和所有其他中间件之前。

    就是这样,但如果您想要更高的性能,您应该像这样启用缓存和压缩支持:

    STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'
    

    如果您想应用压缩但不希望缓存行为,那么您可以使用:

    STATICFILES_STORAGE = 'whitenoise.storage.CompressedStaticFilesStorage'
    

    按照这些步骤,一切都会好起来的。 WhiteNoise Documentation

    【讨论】:

      猜你喜欢
      • 2020-03-01
      • 2018-06-02
      • 2017-04-30
      • 2020-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-30
      相关资源
      最近更新 更多