【问题标题】:Example for customizing the ignored pattern list in Django's collectstatic在 Django 的 collectstatic 中自定义忽略模式列表的示例
【发布时间】:2020-01-15 05:34:15
【问题描述】:

和这里的其他问题一样,我想在运行 collectstatic 时忽略我的 .scss 文件。但是因为我使用的是 Heroku,它会自动运行一个 collectstatic,我宁愿自定义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'] 

但是,当我从 INSTALLED_APPS 替换 'django.contrib.staticfiles' 时遇到了错误。

  • 替换为'project_name.static' 会使终端无法理解collectstatic 管理命令。
  • 添加'project_name' 之后 'django.contrib.staticfiles'(即 不删除后者)使其忽略覆盖并收集 .scss 文件。
  • 替换'project_name.static.apps.StaticConfig' 会抛出一个 Cannot import 'static'.错误

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

【问题讨论】:

    标签: python django collectstatic


    【解决方案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
    

    【讨论】:

    • 我已经添加了它,但它还不能很好地工作。如文档中所述,替换“django.contrib.staticfiles”时存在某种问题。我会相应地更新我的问题。
    猜你喜欢
    • 1970-01-01
    • 2020-11-01
    • 2012-09-09
    • 1970-01-01
    • 1970-01-01
    • 2012-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多