像这里的其他问题一样,我要在运行collectstatic时忽略我的.scss
文件。但是因为我使用的是Heroku,它会自动运行一个集合静态函数,所以我宁愿自定义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']
但是,从'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
的{{1}}替换为'django.contrib.staticfiles'
,现在可以了。
答案 0 :(得分:1)
您可以将其添加到其他应用程序中,或者甚至在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