Python Docker Django 404适用于web静态文件,但适用于管理员静态文件

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:

请在docker django服务静态文件的配置上帮助我

我的
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',
    # ...]