Docker Django 404 用于 web 静态文件,但适合管理静态文件
Docker Django 404 for web static files, but fine for admin static files
请帮助我解决此 docker 用于提供静态文件的 django 配置。
我在 Docker
上的 Django
项目 运行 在交付 static files
时遇到了一些问题。
All static files for admin view is loading fine, but static files for client web view is throwing 404 Not found Error.
这是我的docker.yml
配置详情:
web:
build: ./web
expose:
- "8000"
links:
- postgres:postgres
volumes:
- ./web:/usr/src/app
ports:
- "8000:8000"
env_file: .env
command: python manage.py runserver 0.0.0.0:8000
postgres:
image: postgres:latest
volumes:
- /var/lib/postgresql
ports:
- "5432:5432"
更新
这是管理静态文件 url 看起来像:
http://developer.com:8000/static/admin/css/base.css
这就是客户端静态文件 url 的样子:
http://developer.com:8000/static/css/base.css
静态目录中的那些管理文件夹是由 运行 django 命令 collectstatic
创建的
我以前使用过此设置,并且运行良好。但是当我将项目根文件夹移动到另一个目录时似乎有这个问题。
我完全被困在这里,非常感谢您的所有帮助和反馈。
由于您已将项目移动到另一个目录,因此您的静态目录的路径现在可能也不同了。 Django in most scenarios use apache, nginx or some other web servers to serve static files
。需要注意的一点是您的静态目录应该公开访问。我以前遇到过这样的问题。我做的是我moved static dir to document root mentioned in apache config file
。
因此将您的静态文件移动到 apache 的文档根目录并更新 settings.py 中的静态目录以引用您的 apache 文档根目录中的静态目录。我希望这有帮助。
这是 STATICFILES_DIRS
文件中 settings.py
配置的问题。
This setting defines the additional locations the staticfiles app will traverse if the FileSystemFinder finder is enabled, e.g. if you use the collectstatic or findstatic management command or use the static file serving view.
以下是我 settings.py 中的配置:
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, "static")
现在我将此代码更新为:
STATIC_URL = '/static/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, "static"),
]
每个文件都加载正常。
参考Link
使用 Whitenoise 让您在 django 中处理静态文件时更轻松。
1.If 您正在使用 docker-compose,将 whitenoise 添加到您的 requirements.txt 文件:
whitenoise==3.3.1
2.Add settings.py
中的中间件应用白噪声
MIDDLEWARE_CLASSES = [# 'django.middleware.security.SecurityMiddleware','whitenoise.middleware.WhiteNoiseMiddleware',# ...]
确保将此添加到 security.SecurityMiddleware 应用
下方
3.Finally,更改settings.py
里面的以下变量
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
STATIC_URL = '/static/'
STATICFILES_DIRS = (os.path.join(BASE_DIR,'<app_name>/static'),os.path.join(BASE_DIR, 'static'),)
请务必替换为您的应用名称。请注意,这仅适用于您的静态文件存储在(例如)my_project/app/static/app/.
否则,如果您的静态文件夹位于 my_project/app/static:
STATICFILES_DIRS = (os.path.join(BASE_DIR, 'static'),)
最后禁用 built-in django 静态文件服务器如下:
INSTALLED_APPS = [
# ...
'whitenoise.runserver_nostatic',
'django.contrib.staticfiles',
# ...]
请帮助我解决此 docker 用于提供静态文件的 django 配置。
我在 Docker
上的 Django
项目 运行 在交付 static files
时遇到了一些问题。
All static files for admin view is loading fine, but static files for client web view is throwing 404 Not found Error.
这是我的docker.yml
配置详情:
web:
build: ./web
expose:
- "8000"
links:
- postgres:postgres
volumes:
- ./web:/usr/src/app
ports:
- "8000:8000"
env_file: .env
command: python manage.py runserver 0.0.0.0:8000
postgres:
image: postgres:latest
volumes:
- /var/lib/postgresql
ports:
- "5432:5432"
更新
这是管理静态文件 url 看起来像:
http://developer.com:8000/static/admin/css/base.css
这就是客户端静态文件 url 的样子:
http://developer.com:8000/static/css/base.css
静态目录中的那些管理文件夹是由 运行 django 命令 collectstatic
我以前使用过此设置,并且运行良好。但是当我将项目根文件夹移动到另一个目录时似乎有这个问题。
我完全被困在这里,非常感谢您的所有帮助和反馈。
由于您已将项目移动到另一个目录,因此您的静态目录的路径现在可能也不同了。 Django in most scenarios use apache, nginx or some other web servers to serve static files
。需要注意的一点是您的静态目录应该公开访问。我以前遇到过这样的问题。我做的是我moved static dir to document root mentioned in apache config file
。
因此将您的静态文件移动到 apache 的文档根目录并更新 settings.py 中的静态目录以引用您的 apache 文档根目录中的静态目录。我希望这有帮助。
这是 STATICFILES_DIRS
文件中 settings.py
配置的问题。
This setting defines the additional locations the staticfiles app will traverse if the FileSystemFinder finder is enabled, e.g. if you use the collectstatic or findstatic management command or use the static file serving view.
以下是我 settings.py 中的配置:
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, "static")
现在我将此代码更新为:
STATIC_URL = '/static/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, "static"),
]
每个文件都加载正常。
参考Link
使用 Whitenoise 让您在 django 中处理静态文件时更轻松。
1.If 您正在使用 docker-compose,将 whitenoise 添加到您的 requirements.txt 文件:
whitenoise==3.3.1
2.Add settings.py
中的中间件应用白噪声MIDDLEWARE_CLASSES = [# 'django.middleware.security.SecurityMiddleware','whitenoise.middleware.WhiteNoiseMiddleware',# ...]
确保将此添加到 security.SecurityMiddleware 应用
下方3.Finally,更改settings.py
里面的以下变量STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
STATIC_URL = '/static/'
STATICFILES_DIRS = (os.path.join(BASE_DIR,'<app_name>/static'),os.path.join(BASE_DIR, 'static'),)
请务必替换为您的应用名称。请注意,这仅适用于您的静态文件存储在(例如)my_project/app/static/app/.
否则,如果您的静态文件夹位于 my_project/app/static:
STATICFILES_DIRS = (os.path.join(BASE_DIR, 'static'),)
最后禁用 built-in django 静态文件服务器如下:
INSTALLED_APPS = [ # ... 'whitenoise.runserver_nostatic', 'django.contrib.staticfiles', # ...]