Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django没有看到所有的静态目录_Django - Fatal编程技术网

Django没有看到所有的静态目录

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

在开发模式下,我的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.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,我读过,但没有把这两个版本放在一起。有道理,谢谢。