【发布时间】:2020-01-15 05:34:15
【问题描述】:
和这里的其他问题一样,我想在运行 collectstatic 时忽略我的 .scss 文件。但是因为我使用的是 Heroku,它会自动运行一个 collectstatic,我宁愿自定义collectstatic 的忽略模式列表,也不愿更改管理命令。
Django 2.2 提供a way to do this,如下所述:
默认的忽略模式列表,['CVS', '.', '~'],可以是 以比提供 --ignore 更持久的方式定制 每次 collectstatic 调用时的命令选项。提供自定义 AppConfig 类,覆盖该类的ignore_patterns 属性 并用你的类路径替换'django.contrib.staticfiles' INSTALLED_APPS 设置:
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 建议的那样,我在project_name.project_name 中创建了一个名为static 的应用程序,其中只有一个init.py 文件和一个apps.py。 apps.py 与文档示例完全相同:
from django.contrib.staticfiles.apps import StaticFilesConfig
class StaticConfig(StaticFilesConfig):
name = 'static'
ignore_patterns = ['CVS', '.*', '*~', '*.scss']
但是,当我从 INSTALLED_APPS 替换 'django.contrib.staticfiles' 时遇到了错误。
- 替换为
'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',现在它可以工作了。
【问题讨论】:
标签: python django collectstatic