{% load gdaps i18n %} {% block title %}{{ spa_title }}{% endblock %} {% comment %} Boot configuration for the shell. Rendered as a JSON script element, never as inline JavaScript: a CSP without 'unsafe-inline' for scripts allows it, and this way the values are data the app reads, not code. {% endcomment %} {{ spa_config|json_script:"conjunto-config" }} {% comment %} The translation catalogue — the `djangojs` domain of every installed app, so each plugin's own translations are simply there. A classic script rather than a module: those run before module scripts whatever the order, which is what lets @conjunto/ui's gettext() be an ordinary synchronous call instead of something every screen has to await. Its own URL rather than inline, so the browser keeps it across document loads and revalidates against the ETag. {% endcomment %} {% block head %}{% endblock %} {% comment %} The import map (framework runtime + shared libraries), the stylesheets those libraries declared, the shell configuration and the shell module. Must come before any other module script on the page. {% endcomment %} {% frontend_head %} {% block body %} {% comment %} The one slot this document carries. The host's shell fills it; everything else — rail, topbar, screens — is rendered inside that component. {% endcomment %}
{% endblock %}