Objetivo
Originalmente algunos textos "fijos" de la página están definidos como entradas de tipo Textblock. Esto es peliagudo porque para que todo se renderice bien es necesario haber definido estos objetos Textblock con una serie de nombres concretos desde la interfaz de administración.Al crear un sitio nuevo no está claro que Textblocks son necesarios ni donde están definidos.
Para evitar confusiones y asegurarnos de que el proyecto es más flexible y siempre renderiza bien vamos a definir estos textos como campos de un nuevo modelo SiteConfig que además es un Singleton. Esto nos garantiza que siempre va a haber una y solo una entrada de tipo SiteConfig.
En caso de que SiteConfig no se haya definido todavía se cargaran unos valores por defecto desde fichero.
Además vamos a crear una interfaz de administración independiente para modificar la configuración del sitio y otra para administrar los datos introducidos por los usuarios (los "testimonios").
-
Creamos una nueva app llamada site_config:
> python manage.py startapp SiteConfig
-
Añadimos la app a la lista de apps en settings.py
PROJECT_APPS = [ ... , 'apps.site_config' ]
-
Instalamos django-solo y lo añadimos a la lista de apps:
CONTRIB_APPS = [ ... 'solo' ]
-
Creamos el modelo
SiteConfiguration
en site_config/models.py derivado de solo.SingletonModel -
Creamos el fichero site_config/context_processors.py y definimos
site_config_processor
. Luego añadimos ente nuevo processor al apartadoTEMPLATES
de settings.py:TEMPLATES = [ { ... 'OPTIONS': { 'context_processors': [ ... 'apps.site_config.context_processors.site_config_processor', ], }, }, ]
-
Modificamos site_config/admin.py para que el objeto SiteConfig use una interfaz personalizada (registramos
ConfigAdminSite
comoSingletonModelAdmin
-
Asignamos una nueva ruta a la interfaz de administración de SiteConfig en
urls.py
:urlpatterns = [ ... path( 'config/', config_admin_site.urls ), ... ]