Django的collectstatic自定义忽略模式列表的例子

Example for customizing the ignored pattern list in Django's collectstatic

像这里的其他问题一样,我想在 运行 collectstatic 时忽略我的 .scss 文件。但是因为我使用的是自动运行 collectstatic 的 Heroku,所以我宁愿自定义 collectstatic 的忽略模式列表而不是更改管理命令。

Django 2.2 提供 a way to do this,如下所示:

The default ignored pattern list, ['CVS', '.', '~'], can be customized in a more persistent way than providing the --ignore command option at each collectstatic invocation. Provide a custom AppConfig class, override the ignore_patterns attribute of this class and replace 'django.contrib.staticfiles' with that class path in your INSTALLED_APPS setting:

from django.contrib.staticfiles.apps import StaticFilesConfig

class MyStaticFilesConfig(StaticFilesConfig):
    ignore_patterns = [...]  # your custom ignore list

我的问题是,这是我的第一个 Django 项目,我不太清楚如何提供自定义 AppConfig class(深入研究 AppConfig 文档也无济于事)。我的意思是,我应该将这个 class 添加到一个全新的应用程序中还是使用现有的应用程序?这个 class 会在 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' 时,我 运行 遇到了错误。

更新 2: 回滚应用程序创建后,我再次尝试,但现在,我没有使用 startapp 和文件路径,而是在项目根目录上创建了应用程序,对其进行了测试,然后手动将其移动到我的应用程序文件夹中,又测试了一遍。出于某种原因,我不太明白,这次我将 'django.contrib.staticfiles' 替换为 'project_name.static',现在它起作用了。

您可以将它添加到其他应用程序,甚至可以在 project_name 的根目录中创建一个名为 static 的文件,然后在您的 settings.INSTALLED_APPS 中引用此文件中的 class直接,但推荐的方法是在应用程序包内的 apps.py 文件中提供 AppConfigs。

如果您没有可以放置此 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