Django如何定位/usr/local/lib/python3.6/site-packages目录下的Bootstrap文件?
嘿,这个问题其实戳中了Django静态文件管理的核心逻辑,我来给你一步步理清楚:
第三方应用的静态文件靠
INSTALLED_APPS和静态文件查找器定位
当你通过pip install django-bootstrap-static安装这个包后,它会自动被添加到项目的INSTALLED_APPS配置里(你可以打开settings.py确认,里面应该有'bootstrap4'这类条目)。Django自带的django.contrib.staticfiles应用负责静态文件管理,它的核心组件是静态文件查找器(Static File Finders)——默认情况下,查找器会遍历每个INSTALLED_APPS目录下的static子文件夹。而django-bootstrap-static这个包正好把Bootstrap的css、js、字体等静态文件放在了自身的static/bootstrap目录下,这个包的位置就是你提到的/usr/local/lib/python3.6/site-packages。模板引用静态文件时的匹配逻辑
当你在模板里写{% load bootstrap4 %}(或者直接用{% static 'bootstrap/css/bootstrap.min.css' %}),Django的静态文件查找器会逐个检查INSTALLED_APPS里的应用的static目录,直到找到对应路径的文件。比如bootstrap/css/bootstrap.min.css这个路径,就会匹配到site-packages/django-bootstrap-static/static/bootstrap/css/bootstrap.min.css这个文件。部署时的
collectstatic命令作用
如果你要部署项目,运行python manage.py collectstatic命令时,Django会把所有INSTALLED_APPS里的静态文件,加上你自己配置的STATICFILES_DIRS里的文件,全部复制到STATIC_ROOT指定的目录下。这时候生产环境的服务器就可以直接从这个统一目录读取静态文件,不用再去每个site-packages里逐个查找了。
简单来说,Django就是靠INSTALLED_APPS的注册和静态文件查找器的遍历,自动定位到第三方包中的静态资源的,完全不用你手动把Bootstrap文件复制到自己项目的static文件夹里~
内容的提问来源于stack exchange,提问作者DevforTest

