Template Django

Django fournit un moyen efficace et pratique pour générer et afficher des pages HTML dynamiques en utilisant son système de template (template system).

Un modèle se compose d'une partie statiques pour la sortie HTML,  ainsi que d'une syntaxe spéciale décrivant comment le contenu dynamique sera inséré.

Dans un fichier HTML, nous ne pouvons pas écrire de code python car le code n'est interprété que par l'interpréteur python et non par le navigateur. Nous savons que HTML est un langage de balisage statique, tandis que Python est un langage de programmation dynamique, pour cela on dois passer par le billet du template.

1 -  Configuration du système de template de django

Avant de configurer le système de template, il faut au préalable

  1. Créer un répertoire nommé templates à la racine de notre application myapp
  2. Créer un fichier index.html au sein du répertoire 'templates'
myapp/templates/index.html
   <!DOCTYPE html>  
    <html>  
    <head>  
        <meta charset="UTF-8">  
        <title>Index</title>  
    </head>  
    <body>  
    <h2>Affichage du contenu via un template!!!</h2>  
    </body>  
    </html> 

Pour configurer le système de template, nous devons fournir certaines entrées dans le fichier mysite/settings.py

    TEMPLATES = [  
        {  
            'BACKEND': 'django.template.backends.django.DjangoTemplates',  
            'DIRS': [os.path.join(BASE_DIR,'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',  
                ],  
            },  
        },  
    ]

Ce code mentionne au système de django que le répertoire de template est par défaut 'templates'

2 - Chargement du template

Pour charger le template dans une application django, il suffit de l'appeler dans le fichier views.py via la méthode get_template():

myapp/views.py
from django.shortcuts import render

def index(request):

    return render(request , 'index.html')

3 - Configuration de l'url

from django.contrib import admin
from django.urls import path
from myapp import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('index/' , views.index)
]

3 - Variables de template django

Le système de template Django utilise une syntaxe spécifique pour utiliser et manipuler les variables, les balises, les expressions, etc.

Les variables de template sont accessibles par {{ }} (accolades doubles).

Exemple. (pour une variable nom ayant la valeur 'Houssam')

Bienvenue {{nom}}

Ce qui affiche à l'exécution:
Affiche à la sortie:

Bienvenue Houssam

4 - Exemple de variable de template django

Les variables de templates sont déclarées au niveau du fichier views.py et visualisées au niveau du fichier index.html du template. Afin d'organiser les données, django utilise la structure de dictionnaire pour regrouper les variables de template:

Exemple

myapp/views.py
from django.shortcuts import render

def index(request):
	# definir les variable comme etant les cles d'un dictionnaire
    data_student = {"name" : "Albert" , "email" : "albert@gmail.com" , 
					"phone" : 333659847 , 'age' : 28}

    return render(request , 'index.html' , data_student)

Les variables ici sont les clés dictionnaire data_student: name , email , phone, age , et peuvent être maintenant appelée au niveau du fichier index.html du template:

myapp/templates/index.html
    <!DOCTYPE html>  
    <html>  
    <head>  
        <meta charset="UTF-8">  
        <title>Index</title>  
    </head>  
    <body>  
    <h2>Affichage du contenu avec template!!!</h2>  
Bienvenue          :{{ name }}<br />
Votre email est    : {{ email }} <br />
Votre age age  est : {{ age }}<br />
Votre phone est    : {{ phone }}
</body>
</html>

Ce qui affiche à la sortie:

5 - Les balises (tags en anglais) du template système

Dans un template, les balises (tags en anglais) fournissent une logique dans le processus de rendu. Une balise de template peut être utilisée dans les cas suivants:

  1. pour produire du contenu,
  2. servir de structure de contrôle (une instruction if ou pour une boucle),
  3. récupérer du contenu d'une base de données
  4. permettre l'accès à d'autres balises de modèle.

Les balises de template sont entourées de {% et% } et peuvent contenir n'importe quel type de structure et variable.

5.1 - Cas de la structure conditionnelle if

{% if condition %}     
Affichage des resultats 
{% else %}     
autres resultats 
{% endif %}

Exemple. structure if ... else ...

On définit une variable  age au niveau du fichier myapp/views.py

myapp/views.py
from django.shortcuts import render

def index(request):
    
    Age = { 'age':14 }
   
     return render(request , 'index.html' , Age)

On applique la structure conditionnelle If...Else... au niveau du fichier myapp/templates/index.html

myapp/templates/index.html
    <html>
    <head>
        <meta charset="UTF-8">
        <title> Index </title>
    </head>
    <body>
    <h2> Test majeur ou mineur ! </h2>
    <h3> {% if age < 18 %}</h3>
    <p> Ton age est: {{ age }}  vous etes mineur ! </p>
        {% else %}
    <p> Ton age est: {{ age }} vous êtes majeur ! </p>
        {% endif %}
    </body>
    </html>

5.2 - La balise Pour...FinPour (for tag)

La balise for nous permet le parcourt d'une séquence. Nous pouvons utiliser la balise for pour exécuter des instructions répétées, pour  parcourir le contenu d'une liste, d'un tuple, d'un dictionnaire, etc. Voici la syntaxe de la balise for:

{% for x in list  %}
    <p>La valeur de  x est :  {{ x }}</p>
{% endfor %}

5.3 - Les commentaires

Le système de template de django permet de gérer aussi les commentaires via la syntaxe suivante:

{# Ceci est un commentaire sur une seule ligne #}

Le commentaire que vous écrivez à l'aide de cette syntaxe ne sera pas rendu dans le code source HTML. De plus, vous ne pouvez pas développer ce commentaire sur plusieurs lignes. Par exemple:

{# Ceci n'est pas
un commentaire !#}

Afin de pouvoir écrire des commentaires sur plusieurs lignes, on utilise la syntaxe suivante:

{% comment%}
Ceci est un commentaire
étalé sur
plusieurs lignes!
{% endcomment%}

 

 

Younes Derfoufi
CRMEF OUJDA

1 thought on “Template Django

Leave a Reply