的Django没有看到所有STATIC_DIRS
在发展模式,我的Django应用程序从STATICFILES_DIRS的*一个服务静态文件,而不是其他。的Django没有看到所有STATIC_DIRS
这是我在settings.py文件代码:
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'bower_components'), # OK
os.path.join(BASE_DIR, 'practice_custom'), # Not OK
]
STATICFILES_FINDERS = [
'django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
]
文件中bower_components被发现,但文件practice_custom都没有。两个目录都在同一个地方(顶层)。如果我重新命名bower_components目录然后bower_componentszzzzzz的文件都没有找到,这意味着它们正在通过staticfiles应用程序中。我们在find()方法(---寻找:)中将代码中的打印语句放在代码中,并且它显示了提供的路径,正如您可以看到的那样格式相同,但一个结果为404.
---looking for: practice_custom/xyz/style.css
[09/Mar/2017 21:55:11] "GET /static/practice_custom/xyz/style.css HTTP/1.1" 404 1732
---looking for: bower_components/c3/c3.min.css
[09/Mar/2017 21:55:11] "GET /static/bower_components/c3/c3.min.css HTTP/1.1" 200 2043
任何想法?
编辑:
在检查FileSystemFinder.find_location()我看到了它在寻找bower_components/bower_components,然后在顶层的bower_components具有峰值目录,发现它确实有一个子目录名为bower_components,这是工作的唯一原因!
虽然当我运行collectstatic
我得到静态/ bower_components /引导等...因为我希望看到。
/manage.py
/bower_components/bower_components/bootstrap
/static/bower_components/bootstrap
/...
所以我想,问题是为什么它这样做?!
这是因为使用每静态目录内命名空间Django的行为。它期望您在每个静态文件夹中都有一个唯一的子目录,以避免名称冲突。
静态文件的命名空间
现在我们也许可以直接把我们的静态文件在程序my_app脱身/静态/(而不是创造另一个程序my_app子目录),但它实际上是一个坏理念。 Django将使用它找到的名称匹配的第一个静态文件,并且如果在不同的应用程序中有相同名称的静态文件,Django将无法区分它们。我们需要能够将Django指向正确的位置,并且最简单的方法是通过命名它们来确保它是正确的。也就是说,通过将这些静态文件放入为应用程序本身命名的另一个目录中。
https://docs.djangoproject.com/en/howto/static-files/
所以,如果您有:
├── django_app
│ ├── practice_custom
│ │ ├── example_root.js
│ │ ├── xyz
│ │ │ ├── style.css
│ ├── bower_components
│ │ ├── bower_components
│ │ │ ├── bootstrap
那么你的静态文件将可在:
/static/bower_components/bootstrap
/static/xyz/style.css
/static/example_root.js
我已经读过,但没有把它们放在一起。感谢你。 – andyhasit
什么是你的Django和Python版本? – rodorgas
Django是1.9.5,Python是3.5 – andyhasit