首页 > 解决方案 > 在 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.

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

标签: pythondjangocollectstatic

解决方案


您可以将它添加到其他应用程序中,甚至在 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

推荐阅读