Comment utiliser le flag debug dans un template sous django ?

Active 27 mai 2019    /    Viewed 685    /    Comments 0    /    Edit


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

Liens Site
How to check the TEMPLATE_DEBUG flag in a django template? stackoverflow
how to check DEBUG true/false in django template - exactly in layout.html stackoverflow
How do I get a “debug” variable in my Django template context? stackoverflow


Card image cap
profile-image
Daidalos

Hi, I am Ben.

I have developed this web site from scratch with Django to share with everyone my notes. If you have any ideas or suggestions to improve the site, let me know ! (you can contact me using the form in the welcome page). Thanks!