python - 在 Django 的 collectstatic 中自定义忽略模式列表的示例
问题描述
像这里的其他问题一样,我想.scss
在运行 collectstatic 时忽略我的文件。但是因为我使用的是自动运行 collectstatic 的 Heroku,所以我宁愿自定义collectstatic
的忽略模式列表而不是更改管理命令。
Django 2.2 提供了一种方法来做到这一点,如下所述:
默认忽略的模式列表,['CVS', '。', ' ~'],可以以比在每次 collectstatic 调用时提供 --ignore 命令选项更持久的方式进行自定义。提供一个自定义 AppConfig 类,覆盖该类的 ignore_patterns 属性,并在 INSTALLED_APPS 设置中将 'django.contrib.staticfiles' 替换为该类路径:
from django.contrib.staticfiles.apps import StaticFilesConfig
class MyStaticFilesConfig(StaticFilesConfig):
ignore_patterns = [...] # your custom ignore list
我的问题是,这是我的第一个 Django 项目,我不太清楚如何提供自定义 AppConfig 类(深入研究 AppConfig 文档也无济于事)。我的意思是,我应该将这个类添加到一个全新的应用程序中还是使用现有的应用程序?这个类会在一个apps.py
文件中吗?如果是这样,最好的应用程序应该是什么?所以我问是否有人可以为我提供最佳实践的例子。
作为参考,现在我的应用程序结构是这样的(所有模板、资产和应用程序都组合在它们自己的文件夹中,而不是在每个应用程序中):
-- project_name
-- assets
-- app1
-- templates
-- project_name
-- app1
-- app2
-- __init__.py
-- settings.py
-- urls.py
-- wsgi.py
更新:
正如Nico所建议的,我创建了一个名为 static in 的应用程序,project_name.project_name
其中只有一个 init.py 文件和一个 apps.py。这apps.py
与文档示例完全相同:
from django.contrib.staticfiles.apps import StaticFilesConfig
class StaticConfig(StaticFilesConfig):
name = 'static'
ignore_patterns = ['CVS', '.*', '*~', '*.scss']
但是,'django.contrib.staticfiles'
从INSTALLED_APPS
.
- 替换为
'project_name.static'
使终端不理解collectstatic
管理命令。 - 添加
'project_name'
之后'django.contrib.staticfiles'
(即不删除后者)使其忽略覆盖并收集.scss
文件。 - 替换为
'project_name.static.apps.StaticConfig'
抛出Cannot import 'static'.
错误
更新2:
在我回滚应用程序创建后,我再次尝试,但现在,我没有使用startapp
文件路径,而是在项目根目录上创建了应用程序,对其进行了测试,然后手动将其移动到我的应用程序的文件夹中,并且再次测试它。出于某种原因,我不太明白,这次我更换'django.contrib.staticfiles'
了'project_name.static'
,现在它起作用了。
解决方案
您可以将它添加到其他应用程序中,甚至在 project_name 的根目录中创建一个名为 static 的文件,并settings.INSTALLED_APPS
直接在您的文件中引用此文件中的类,但推荐的提供 AppConfigs 的方法是在里面的 apps.py 文件中应用程序包。
如果您没有AppConfig
可以放置它的应用程序,我认为最佳做法是在 project_name.project_name 下创建一个名为 static 的包,其中只有一个init .py 文件和一个 apps.py 文件。
在此文件中,您可以AppConfig
按照您描述的方式创建您的文件。您的文件结构将如下所示:
-- project_name
-- assets
-- app1
-- templates
-- project_name
-- app1
-- app2
-- static
-- __init__.py
-- apps.py
-- __init__.py
-- settings.py
-- urls.py
-- wsgi.py
推荐阅读
- jenkins - 如何将 Percy.io 与 Gerrit 集成(存储库集成)?
- r - 根据唯一值合并 3 列?
- javascript - 如何停止和重置我的倒数计时器?
- r - 为什么 R 为相同的值获得相同的索引?
- java - 在Java中可以做到这一点吗?
- javascript - 创建组件时如何以及在何处将 JSON 数据作为道具传递
- linux - GitKraken 不会在 Ubuntu 上更新
- c# - WPF - 强制绑定不可见的组合框
- ios - 自从升级到 Xcode 10.2 我不能再通过 cli 运行 react-native run-ios
- c# - 如何将我的 winform 更改为另一种语言