在Django的collectstatic

时间:2019-09-13 10:32:50

标签: python django collectstatic

像这里的其他问题一样,我要在运行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管理命令。
  • 在{em> 'project_name'之后添加'django.contrib.staticfiles' (即 不删除后者)使其忽略覆盖并收集 .scss个文件。
  • 替换'project_name.static.apps.StaticConfig'会引发 Cannot import 'static'.错误

更新2: 回滚应用程序创建后,我再次尝试了,但是现在,我没有在文件根目录中使用该应用程序,而是在项目根目录中创建了该应用程序,对其进行了测试,然后将其手动移动到应用程序的文件夹中,然后再次进行测试。由于某种原因,我不太了解,这次我将startapp的{​​{1}}替换为'django.contrib.staticfiles',现在可以了。

1 个答案:

答案 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