from importlib import import_module from django.conf import settings BOOTSTRAP5_DEFAULTS = { "css_url": { "href": "https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css", "integrity": "sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3", "crossorigin": "anonymous", }, "javascript_url": { "url": "https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js", "integrity": "sha384-ka7Sk0Gln4gmtz2MlQnikT1wXgYsOg+OMhuP+IlRH9sENBO0LRn5q+8nbTov4+1p", "crossorigin": "anonymous", }, "theme_url": None, "javascript_in_head": False, "use_i18n": False, "horizontal_label_class": "col-md-3", "horizontal_field_class": "col-md-9", "set_placeholder": True, "required_css_class": "", "error_css_class": "is-invalid", "success_css_class": "is-valid", "formset_renderers": {"default": "bootstrap5.renderers.FormsetRenderer"}, "form_renderers": {"default": "bootstrap5.renderers.FormRenderer"}, "field_renderers": { "default": "bootstrap5.renderers.FieldRenderer", "inline": "bootstrap5.renderers.InlineFieldRenderer", "horizontal": "bootstrap5.renderers.HorizontalFieldRenderer", }, } def get_bootstrap_setting(name, default=None): """Read a setting.""" # Start with a copy of default settings BOOTSTRAP5 = BOOTSTRAP5_DEFAULTS.copy() # Override with user settings from settings.py BOOTSTRAP5.update(getattr(settings, "BOOTSTRAP5", {})) # Update use_i18n BOOTSTRAP5["use_i18n"] = i18n_enabled() return BOOTSTRAP5.get(name, default) def javascript_url(): """Return the full url to the Bootstrap JavaScript file.""" return get_bootstrap_setting("javascript_url") def css_url(): """Return the full url to the Bootstrap CSS file.""" return get_bootstrap_setting("css_url") def theme_url(): """Return the full url to the theme CSS file.""" return get_bootstrap_setting("theme_url") def i18n_enabled(): """Return the projects i18n setting.""" return getattr(settings, "USE_I18N", False) def get_renderer(renderers, **kwargs): layout = kwargs.get("layout", "") path = renderers.get(layout, renderers["default"]) mod, cls = path.rsplit(".", 1) return getattr(import_module(mod), cls) def get_formset_renderer(**kwargs): renderers = get_bootstrap_setting("formset_renderers") return get_renderer(renderers, **kwargs) def get_form_renderer(**kwargs): renderers = get_bootstrap_setting("form_renderers") return get_renderer(renderers, **kwargs) def get_field_renderer(**kwargs): renderers = get_bootstrap_setting("field_renderers") return get_renderer(renderers, **kwargs)