django - 部署的 Django 项目不加载静态文件

标签 django ubuntu deployment

我刚刚(有史以来第一次)将 Django 项目部署到 Web 服务器。一切(包括 postgres)都可以完美运行,除了无法加载静态图像。
这是settings.py的相关部分:

# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/3.2/howto/static-files/

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

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

# Default primary key field type
# https://docs.djangoproject.com/en/3.2/ref/settings/#default-auto-field

DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'

LOGIN_REDIRECT_URL = 'home'
LOGIN_URL = 'login'
LOGOUT_URL = 'logout'

AUTH_USER_MODEL = 'account.CustomUser'

MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media/')
我在控制台中收到的错误消息如下:
"GET /static/images/logo.png HTTP/1.1" 404 1808
但是,在控制台中检查文件路径时,我有以下内容:
root@melius:/django/melius/static/images# 
在此文件夹中存在文件。
我的错误在哪里?

最佳答案

您的静态文件可能有两个原因无法正常工作。
首先,Django 在生产环境中不提供静态文件。
我还注意到您的静态设置配置错误。
确保您的 setting.py看起来像这样:

STATICFILES_DIRS = [os.path.join(BASE_DIR, 'YOUR STATIC FILE FOLDERS')]
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
如果您在 Nginx or 上运行您的应用程序 Apache 2 please make sure you configured the .conf` 文件正确地提供静态文件。
此外,还有一个简单明了的解决方案,即 whitenoise如果您不想使用 Nginx 或类似服务器提供静态文件。
你可以试试whitenoise要使用 whitenoise,请先安装它并像这样更新您的 settings.py 文件:
STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'
并将其添加到 session 中间件之前的中间件中
MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'whitenoise.middleware.WhiteNoiseMiddleware', # Serve static in production without nginx or apache
    'django.contrib.sessions.middleware.SessionMiddleware',
    ........
]
希望解决方案能解决您的问题
在这里您可以获取白噪声文档:http://whitenoise.evans.io/en/stable/
注意:静态根目录和静态目录不应该相同

关于django - 部署的 Django 项目不加载静态文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68530828/

相关文章:

deployment - 如何为我的其他版本的Office Addin制作单一安装程序

django - 在 Nginx 代理 + apache 设置中重写 URL

sql - Django 原始 SQL 查询 - 循环结果,它为每次迭代执行查询

python - Django ORM 无法为不在其中的多对多生成正确的 SQL

python - 使用一个参数属性作为另一个参数的默认值?

Linux平台: Enlarge video screen size N times

maven - IntelliJ Idea中如何编译打包maven gwt项目

python - 使用结构切换到不同的用户

ruby-on-rails - 新 Rails 项目启动时丢失文件

git - 在 ubuntu 中安装最新版本的 git