为什么collectstatic不会复制我的静态文件?

eug*_*ene 13 django static

我有MyApp/static/MyApp目录

当我运行./manage.py collectstatic时,我希望将MyApp目录复制到STATIC_ROOT但它不会

我也有DownloadedApp/static/DownloadedApp,并将其复制到STATIC_ROOT.

我错过了什么?

Dan*_*rst 17

什么STATIC_ROOT,STATICFILES_FINDERSSTATICFILES_DIRS你的settings.py

collectstatic运行时,默认STATICFILES_FINDERSdjango.contrib.staticfiles.finders.FileSystemFinder将会从您在任何路径收集您的静态文件STATICFILES_DIRS.

另一个默认STATICFILES_FINDERSdjango.contrib.staticfiles.finders.AppDirectoriesFinder/static/显示在您的任何应用程序的文件夹中INSTALLED_APPS.

找到的所有静态文件都将放在指定的STATIC_ROOT目录中.

查看此链接到collectstatic文档

这链接解释了settings.py中的各种静态设置

您还可以使用python manage.py findstatic查看哪些目录collectstatic.

  • `python manage.py findstatic`渲染`错误:输入至少一个静态文件 (7认同)
  • @antonagestam`python manage.py findstatic -v 3 dummy`将在错误后输出路径. (7认同)

Mor*_*itz 5

这恰好发生在我身上,我不小心将应用程序的静态文件目录放在.gitignore文件中.所以在我的本地机器上它收集得很好,但在生产中静态文件实际上已经丢失(gitignored).

  • @lysdexia你必须区分应用程序的静态文件夹和项目的静态文件夹.当你运行``collectstatic``时,它会将各个应用程序的静态文件夹复制到项目的静态文件夹中.如果你gitignored你的应用程序的静态文件夹,它不会被推入生产环境,因此不会被收集. (2认同)

Kri*_*gid 5

只需这样做并使命名约定相同

STATIC_URL = '/static/'
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'static')
]
STATIC_ROOT = os.path.join(BASE_DIR, 'assets')
Run Code Online (Sandbox Code Playgroud)

静态目录包含所有项目资产

当你运行这个cmd时,资产目录将自动创建

python3 manage.py collectstatic
Run Code Online (Sandbox Code Playgroud)

这会将所有静态文件夹内容复制到资产文件夹中

希望这可以帮助 :)

  • 我按照完全相同的步骤操作,但它没有复制资产文件夹中的文件 (3认同)