mirror of
https://github.com/wrabit/django-cotton.git
synced 2025-07-07 17:45:01 +00:00
88 lines
2.9 KiB
Python
88 lines
2.9 KiB
Python
"""
|
|
django-cotton
|
|
|
|
App configuration to set up the cotton loader and builtins automatically.
|
|
"""
|
|
import re
|
|
from contextlib import suppress
|
|
|
|
import django.contrib.admin
|
|
import django.template
|
|
from django.apps import AppConfig
|
|
from django.conf import settings
|
|
|
|
|
|
def wrap_loaders(name):
|
|
for template_config in settings.TEMPLATES:
|
|
engine_name = template_config.get("NAME")
|
|
if not engine_name:
|
|
engine_name = template_config["BACKEND"].split(".")[-2]
|
|
if engine_name == name:
|
|
loaders = template_config.setdefault("OPTIONS", {}).get("loaders", [])
|
|
|
|
loaders_already_configured = (
|
|
loaders
|
|
and isinstance(loaders, (list, tuple))
|
|
and isinstance(loaders[0], (tuple, list))
|
|
and loaders[0][0] == "django.template.loaders.cached.Loader"
|
|
and "django_cotton.cotton_loader.Loader" in loaders[0][1]
|
|
)
|
|
|
|
if not loaders_already_configured:
|
|
template_config.pop("APP_DIRS", None)
|
|
default_loaders = [
|
|
"django_cotton.cotton_loader.Loader",
|
|
"django.template.loaders.filesystem.Loader",
|
|
"django.template.loaders.app_directories.Loader",
|
|
]
|
|
cached_loaders = [("django.template.loaders.cached.Loader", default_loaders)]
|
|
template_config["OPTIONS"]["loaders"] = cached_loaders
|
|
|
|
options = template_config.setdefault("OPTIONS", {})
|
|
builtins = options.setdefault("builtins", [])
|
|
builtins_already_configured = (
|
|
builtins and "django_cotton.templatetags.cotton" in builtins
|
|
)
|
|
if not builtins_already_configured:
|
|
template_config["OPTIONS"]["builtins"].insert(
|
|
0, "django_cotton.templatetags.cotton"
|
|
)
|
|
|
|
break
|
|
|
|
# Force re-evaluation of settings.TEMPLATES because EngineHandler caches it.
|
|
with suppress(AttributeError):
|
|
del django.template.engines.templates
|
|
django.template.engines._engines = {}
|
|
|
|
|
|
class LoaderAppConfig(AppConfig):
|
|
"""
|
|
This, the default configuration, does the automatic setup of a partials loader.
|
|
"""
|
|
|
|
name = "django_cotton"
|
|
default = True
|
|
|
|
def ready(self):
|
|
from django.template import base
|
|
|
|
# Support for multiline tags
|
|
base.tag_re = re.compile(base.tag_re.pattern, re.DOTALL)
|
|
|
|
wrap_loaders("django")
|
|
|
|
|
|
class SimpleAppConfig(AppConfig):
|
|
"""
|
|
This, the non-default configuration, allows the user to opt-out of the automatic configuration. They just need to
|
|
add "django_cotton.apps.SimpleAppConfig" to INSTALLED_APPS instead of "django_cotton".
|
|
"""
|
|
|
|
name = "django_cotton"
|
|
|
|
def ready(self):
|
|
from django.template import base
|
|
|
|
# Support for multiline tags
|
|
base.tag_re = re.compile(base.tag_re.pattern, re.DOTALL)
|