Django没有看到所有的静态目录
在开发模式下,我的django应用程序提供来自*其中一个STATICFILES_dir的静态文件,但不提供另一个 下面是我在settings.py文件中的代码:Django没有看到所有的静态目录,django,Django,在开发模式下,我的django应用程序提供来自*其中一个STATICFILES_dir的静态文件,但不提供另一个 下面是我在settings.py文件中的代码: STATICFILES_DIRS = [ os.path.join(BASE_DIR, 'bower_components'), # OK os.path.join(BASE_DIR, 'practice_custom'), # Not OK ] STATICFILES_FINDERS = [ 'django
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_组件中找到文件,但在practice_custom中找不到文件。两个目录位于同一位置(顶层)。如果我将bower_components目录重命名为bower_components szzzzz,则找不到文件,这意味着它们是通过staticfiles应用程序找到的
FileSystemFinder似乎也在工作,事实上,我在find()方法(--seoking:)的代码中放入了print语句,它显示了提供的路径,正如您可以看到的,它们的格式相同,但一个结果是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\u组件/bootstrap等。。。正如我所期待的那样
/manage.py
/bower_components/bower_components/bootstrap
/static/bower_components/bootstrap
/...
所以我想,问题是它为什么会这样做 这是因为Django行为在每个静态目录中使用名称空间。它希望您在每个静态文件夹中都有一个唯一的子目录,以避免名称冲突 静态文件命名空间 现在,我们可以将静态文件直接放在my_app/static/(而不是创建另一个my_app子目录)中,但这实际上是个坏主意。Django将使用它找到的第一个名称匹配的静态文件,如果在不同的应用程序中有同名的静态文件,Django将无法区分它们。我们需要能够将Django指向正确的一个,确保这一点的最简单方法是对它们命名。也就是说,将这些静态文件放在另一个为应用程序本身命名的目录中 因此,如果你有:
├── 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
你的Django和python版本是什么?Django是1.9.5,python是3.5,我读过,但没有把这两个版本放在一起。有道理,谢谢。