Python Django collectstatics仅收集管理员静态文件

Python Django collectstatics仅收集管理员静态文件,python,django,docker,nginx,Python,Django,Docker,Nginx,我有一个django应用程序运行在带有Nginx的docker容器中。我的应用程序的所有静态文件(如css、js)都已成功找到,我的nginx.conf文件已按原样配置。但是找不到我的django/admin静态文件 我发现了,并尝试了它所说的: 1) 在settings.py中设置STATIC_URL和STATIC_ROOT 2) 在nginx配置中只定义一个静态条目(带尾随项) 斜杠)。不需要第二个地址为static/admin/: location /static/ { alia

我有一个django应用程序运行在带有Nginx的docker容器中。我的应用程序的所有静态文件(如css、js)都已成功找到,我的nginx.conf文件已按原样配置。但是找不到我的django/admin静态文件

我发现了,并尝试了它所说的:

1) 在settings.py中设置STATIC_URL和STATIC_ROOT

2) 在nginx配置中只定义一个静态条目(带尾随项) 斜杠)。不需要第二个地址为static/admin/:

location /static/  {
    alias /path/to/static/; }
3) 使用collectstatic,它应该收集admin->static/admin。它将住在同一个地点 收集的所有其他静态媒体

python manage.py collectstatic
当我这样做时,我的STATIC_ROOT会接收管理员静态文件,但不会接收我的应用程序静态文件

我对docker卷没有问题。NGINX容器正在接收静态根内容。但我将共享我的.yml文件,因为您可能会检测到其中的错误

“manage.py collectstatic”在我的cldj/Dockerfile中运行

我的文件: settings.py:

STATIC_URL = '/static/'
STATICFILES_DIRS = ['/proj/static/']
STATIC_ROOT = os.path.join(BASE_DIR, 'static_files')
nginx.conf:

location /static/ {
    autoindex off;
    alias /static_files/;
}
docker-compose.yml:

version: '3'
volumes:
  static_files:

services:

  dj:
    build:
      context: .
      dockerfile: df/cldj/Dockerfile
    container_name: dj
    volumes:
      - ./proj:/proj
      - static_files:/proj/static_files
    ports:
      - 8000:8000
    command: gunicorn -w 4 proj.wsgi --bind 0.0.0.0:8000

  nx:
    build:
      context: .
      dockerfile: df/nx/Dockerfile
    container_name: nx
    volumes:
      - static_files:/static_files
    ports:
      - 80:80
      - 443:443
    depends_on:
      - dj
更新 如Abhimanyu所述,我已更改了我的
设置.py

STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
使用
docker compose build
应用程序容器按需填充collectstatic。但是NGINX容器接收一个名为“static_files”的空文件夹

我意识到,
docker compose.yml
在应用程序服务中包含以下行:

volumes:
  - ./proj:/proj
  - static_files:/proj/static_files
我将其改为指向“static”文件夹(my
static\u ROOT
):

但是这样一来,整个
static/
文件夹又被
static/admin
文件夹覆盖了(我的应用程序静态文件丢失了)

更新2(解决方案) 遵循Abhimanyu指令后,我需要使用
$docker volume rm static_files
删除旧的
静态_文件


现在它工作得很好。

使用
STATIC\u ROOT=os.path.join(BASE\u DIR,'STATIC/')
然后跑

python manage.py collectstatic

它将在项目目录中创建一个名为static的文件夹。在那里你可以找到你所有的css和js文件

“proj/static/”它已经是我的静态文件夹(static\u URL)。这就是为什么我必须设置另一个静态根名称。我在写上面的问题时犯了一个错误(我写了‘myapp/static’)。现在已修复,以避免误解。您已将STATIC_URL='/STATIC/',但尚未将“/STATIC/”传递给STATIC_ROOT。照上面说的去做,它会起作用的。我这样做了,需要删除现有的docker卷。现在它工作得很好。
python manage.py collectstatic