Python Docker Django 404适用于web静态文件,但适用于管理员静态文件
请在docker django服务静态文件的配置上帮助我 我的Python Docker Django 404适用于web静态文件,但适用于管理员静态文件,python,django,docker,dockerfile,docker-machine,Python,Django,Docker,Dockerfile,Docker Machine,请在docker django服务静态文件的配置上帮助我 我的Django项目在Docker上运行,在交付静态文件时遇到了一些问题 管理视图的所有静态文件加载正常,但客户端web视图的静态文件抛出404未找到错误 这是我的docker.yml配置详细信息: web: build: ./web expose: - "8000" links: - postgres:postgres volumes: - ./web:/usr/src/app ports:
Django
项目在Docker
上运行,在交付静态文件时遇到了一些问题
管理视图的所有静态文件加载正常,但客户端web视图的静态文件抛出404未找到错误
这是我的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,如下所示:
这就是客户端静态文件url的外观:
其中,通过运行django命令collectstatic
我以前使用过这个设置,效果很好。但是当我将项目根文件夹移动到另一个目录时,似乎出现了这个问题
我完全被困在这里,非常感谢您的帮助和反馈。当您将项目移动到另一个目录时,静态目录的路径现在可能也不同了Django在大多数情况下使用apache、nginx或其他一些web服务器来服务静态文件
。需要注意的一点是,应该公开访问静态目录。我以前遇到过这样的问题。我所做的是将static dir移动到apache配置文件中提到的文档根目录中
因此,将静态文件移动到apache的文档根目录,并更新settings.py中的静态目录,以引用apache文档根目录中的静态目录。我希望这有帮助 这是设置.py
文件中的静态文件\u DIRS
配置的问题
如果启用了FileSystemFinder查找程序,此设置定义了staticfiles应用程序将遍历的其他位置,例如,如果使用collectstatic或findstatic管理命令或使用静态文件服务视图
以下是my settings.py中的配置:
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, "static")
现在,我将此代码更新为:
STATIC_URL = '/static/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, "static"),
]
每个文件都加载得很好
参考资料用于在django中处理静态文件时使您的生活更轻松
1.如果您正在使用docker compose,请将whitenoise添加到requirements.txt文件中:
whitenoise==3.3.1
2.将whitenoise添加到设置中的中间件应用程序中。py
MIDDLEWARE_CLASSES = [# 'django.middleware.security.SecurityMiddleware','whitenoise.middleware.WhiteNoiseMiddleware',# ...]
请确保将此添加到您的security.SecurityMiddleware应用程序下方
3.最后,在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'),)
最后,禁用内置的django静态文件服务器,如下所示:
INSTALLED_APPS = [
# ...
'whitenoise.runserver_nostatic',
'django.contrib.staticfiles',
# ...]
在settings.py中,静态根目录和静态文件目录是什么?static\u URL='/static/'
static\u root=os.path.join(BASE\u DIR,“static”)
只有这两种配置。我已经将所有的static
文件夹移动到DocumentRoot路径,但不起作用。您可以使用URL或URL在浏览器中访问您的文档根目录吗?尝试访问css文件或任何静态文件。url类似于http://your-ip/static/css/bootstrap.css
。这很有效,谢谢!奇怪的是为什么它会在容器中失败。请注意:根据您用于静态文件的路径,您可能需要在静态文件的末尾添加/我刚刚遇到过这个问题。那么,您是否删除了静态根?你手边有github示例应用程序吗?@GlennSampson是的,我已经从设置中删除了静态根目录
。py
如果我删除静态根目录
,我会得到一个错误:你使用的是静态文件应用程序,而没有将静态根目录设置设置为文件系统路径。
尝试过,但仍然得到404,我也需要执行collectstatic吗?这是一个很好的答案,解决了我对Django的第一个不满。您通过Docker集成为我节省了数小时的时间,非常感谢!
INSTALLED_APPS = [
# ...
'whitenoise.runserver_nostatic',
'django.contrib.staticfiles',
# ...]