像这里的其他问题一样,我想.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'
,现在它起作用了。