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'
时,我 运行 遇到了错误。
- 将其替换为
'project_name.static'
会使终端无法理解collectstatic
管理命令。
- 在
'django.contrib.staticfiles'
之后添加 'project_name'
(即
不删除后者)使其忽略覆盖并收集
.scss
个文件。
- 替换
'project_name.static.apps.StaticConfig'
抛出一个
Cannot import 'static'.
错误
更新 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
像这里的其他问题一样,我想在 运行 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'
时,我 运行 遇到了错误。
- 将其替换为
'project_name.static'
会使终端无法理解collectstatic
管理命令。 - 在
'django.contrib.staticfiles'
之后添加'project_name'
(即 不删除后者)使其忽略覆盖并收集.scss
个文件。 - 替换
'project_name.static.apps.StaticConfig'
抛出一个Cannot import 'static'.
错误
更新 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