Django - Como tener la misma variable en todas las plantillas | Programador Web Valencia

Django - Como tener la misma variable en todas las plantillas

1 minuto

Django

En alguna ocasión te preguntarás como tener la misma variable en todas las plantillas en Django. O lo que es lo mismo, poseer una variable presente en todas las templates de tu web con Django. En este tutorial te enseñaré los pasos lo más anemo que me sea posible.

En el ejemplo supondré que quiero tener en todas mis plantillas una lista con los planetas de nuestro sistema solar.

Paso 1

Creamos un fichero dentro de nuestra aplicación con el nombre context_processors.py.

Supongamos que mi aplicación se llama universo y lo tengo dentro de una carpeta llamada apps.

touch apps/universo/context_processors.py

Paso 2

Dentro del nuevo fichero de Python pegaremos el siguiente fragmento:

def mis_variables(request):
    planetas = ('mercurio', 'venus', 'tierra', 'marte')
    return {'planetas': planetas}

Paso 3

En settings.py, añadimos un nuevo context_processors:. Que es una OPTIONS de TEMPLATES.

En mi ejemplo, pasaría de tener esto:

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'apps/universo/templates')],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
            'builtins': [
                'django.contrib.staticfiles.templatetags.staticfiles',
                'django.templatetags.i18n',
            ],
        },
    },
]

a esto

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'apps/universo/templates')],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
                'apps.universo.context_processors.mis_variables',
            ],
            'builtins': [
                'django.contrib.staticfiles.templatetags.staticfiles',
                'django.templatetags.i18n',
            ],
        },
    },
]

Paso 4

En estos momentos ya podremos utilizar la variable. Da lo mismo si es un layout o un hijo, estará presente en cada HTML que renderices.

<html>
    <body>
        <ul>
        {% for planeta in planetas %}
            <li>{{ planeta }}</li>
        {% endfor %}
        </ul>
    </body>
</html>

Paso 5

Dejen un comentario si les ha gustado :)

Esta obra está bajo una Licencia Creative Commons Atribución-NoComercial-SinDerivadas 4.0 Internacional.

Atribución/Reconocimiento-NoComercial-SinDerivados 4.0 Internacional

¿Me ayudas?

Comprame un café
Pulsa sobre la imagen

No te sientas obligado a realizar una donación, pero cada aportación mantiene el sitio en activo logrando que continúe existiendo y sea accesible para otras personas. Además me motiva a crear nuevo contenido.

Comentarios

{{ comments.length }} comentarios

Nuevo comentario

Nueva replica  {{ formatEllipsisAuthor(replyComment.author) }}

Acepto la política de Protección de Datos.

Escribe el primer comentario

Tal vez también te interese...