Comment utiliser le flag debug dans un template sous django ?

Published: 27 mai 2019

DMCA.com Protection Status

Exemples de comment utiliser le flag debug dans un template sous django. L'objectif ici était de ne pas utiliser certains éléments (comme des pubs) quand le flag DEBUG (dans le fichier settings,py) est réglé sur False par exemple.

Méthode 1

Si seulement quelques pages sont concernées on peut simplement envoyer dans un template le flag DEBUG a partir d'une "view" comme ceci (dans le fichier views.py):

from django.conf import settings

def my_view(request):
    debug_flag = settings.DEBUG
    context = {'debug_flag':debug_flag}
    return render(request, "my_app/my_template.html", context )

On peut alors tester dans le template "my_template.html" si DEBUG est vrai ou faux:

{% if debug_flag %}
    do something
{% else %}
    do something
{% endif %}

Méthode 2

Une autre solution est d'utiliser un "context processor" pour pouvoir accéder dans tous les templates à la valeur de DEBUG. Dans le fichier processor.py:

from django.conf import settings

def my_context(request):
    debug_flag = settings.DEBUG
    return{"debug_flag":debug_flag}

Il faut ensuite ajouter dans le fichier settings.py la ligne 'my_app.processor.my_context':

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
        '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',
                'my_app.processor.my_context',
            ],
        },
    },
]

On peut alors dans tous les templates tester la condition suivante:

{% if debug_flag %}
    do something
{% else %}
    do something
{% endif %}

Méthode 3

Autre solution avec INTERNAL_IPS dans le fichier settings.py:

INTERNAL_IPS = (
    '127.0.0.1',
)

puis dans un template:

{% if debug %}
    do something
{% else %}
    do something
{% endif %}

Références