递归应用依赖django

时间:2017-11-26 09:00:08

标签: django python-3.x

Django的INSTALLED_APPS是设置文件中的列表,最终是wsgi-application的devops girl / guy负责。

但是,在创建应用时,我经常使用其他应用的模板和模板标签,例如django-bootstrap4。考虑一个简单的bootstrap4-with-butter app,它只能提供这个模板:

bs4wb/templates/bs4wb/base.html

{% extends "bootstrap4/bootstrap4.html" %}

{% block bootstrap4_extra_head %}
<script> confirm('with butter?!'); </script>
{% endblock bootstrap4_extra_head %}

devops安装和添加到INSTALLED_APPS是不够的 bs4wb,他们也需要对django-bootstrap4执行相同操作,此外,他/她还需要跟踪我从django-bootstrap4升级到django-bootstrap5时使用的版本或者其他的东西。也就是说,我需要记录一个可以改变的额外步骤。

如何指定递归的INSTALLED_APPS?是否有像app-union这样的东西?例如(显然难看的语法,抱歉):

export('bs4wb', app_by_union(['bootstrap4', 'bs4wb']) )
每当bootstrap4添加到bs4wb时,

会将bs4wbINSTALLED_APPS彼此相邻?

或者,如果bootstrap4未添加到已安装的应用中,我应该提出异常,并声明应该添加该应用。

1 个答案:

答案 0 :(得分:0)

作为应用开发者,您通常使用django&#39; system check framework来确保环境符合您的要求。

在您的情况下,您会检查INSTALLED_APPS中是否包含其他应用,如果没有则添加错误。

它可能看起来像那样(未经测试):

from django.conf import settings
from django.core.checks import Error, register

@register()
def bootstrap4_check(app_configs, **kwargs):
    errors = []
    if not 'django-bootstrap4' in settings.INSTALLED_APPS:
        errors.append(
            Error('django-bootstrap4 needs to be in INSTALLED_APPS')
        )
    return errors

如果您的要求随新版本而变化:调整检查。