Table des matières

Template

Un gabarit (template) contient la partie statique du résultat HTML souhaité ainsi qu’une certaine syntaxe particulière définissant comment insérer le contenu dynamique.

Création d’un Template

Les templates de chaque applications doivent être dans un sous-dossier templates.

Dans ce dossier templates, il faut créer un autre sous-dossier du nom de l’application.

Exemple :

blogue/templates/blogue

Créer un fichier index.html dans ce dossier puis écrire du html dans ce fichier

INSTALLED_APPS

Par convention, Django recherche le sous-dossier templates dans chaque applications figurant dans INSTALLED_APPS du fichier settings.py du projet. N’oubliez pas d’ajouter vos applications dans cette liste.

Utiliser le template

Pour utiliser le fichier index.html, il faut modifier la fonction index dans le fichier views.py

def index(request):
    return render(request, "blogue/index.html")

On utilise maintenant la fonction render() qui prend deux paramètres :

Transmettre des informations au template

La fonction render() peut prendre un troisième paramètre pour envoyer des variables au template.

def index(request):
    articles = [
        {'title': 'Le cégep Garneau'},
        {'title': 'C\'est la rentrée !!!'}
    ]
    return render(request, "blogue/index.html", {
        'articles' : articles
    })

Dans le template, on utilise {{ pour appeler une variable }}

Et {% pour les déclaration if, for, while… %}

<body>
  <h1>Titre</h1>
    <h2>{{ articles.0.title }}</h2>
    {% for article_item in articles %}
      <h3>{{ article_item.title }}</h3>
    {% endfor %}
</body>

Voir la documentation pour la liste des balises utilisables dans un template

Passer des paramètres dans l’url

Exemple : http://monsite.ca/blogue/article/2

Modifier le fichier urls.py pour ajouter les balises

urlpatterns = [
  path('', views.index, name='index'),
  path('article/<int:article_id>', views.article, name='articleDetails'),
  ]

Django va appeler la fonction article(request, article_id=2)

On modifie maintenant la fonction article afin qu’elle reçoive le article_id

def article(request, article_id):
    return render(request, "blogue/article.html", {
        'article_id' : article_id
    })

Et on passe la variable au template article.html (que vous pouvez créer!)

Dans une vraie application, on irait chercher l’article correspondant dans la base de données.

Type de paramètres

Les paramètres de chemin suivants sont disponibles par défaut :

Créer des liens

Ajoutons des ids pour nos articles

def index(request):
    articles = [
        {'title': 'Le cégep Garneau', 'article_id': 1},
        {'title': 'C\'est la rentrée !!!', 'article_id': 2}
    ]
    return render(request, "blogue/index.html", {
        'articles' : articles
    })

Pour éviter les problèmes, on utilise donc le champ name qui est défini dans les routes.

<a href="{% url 'articleDetails' article_item.article_id %}">
  {{ article_item.title }}
</a>

Le langage de gabarit de Django

Voir la documentation afin d'avoir un aperçu du fonctionnement des gabarits.

Fichiers statiques

Les sites Web ont généralement besoin de servir des fichiers supplémentaires tels que des images, du JavaScript ou du CSS. Dans Django, ces fichiers sont appelés « fichiers statiques ». Django met à disposition django.contrib.staticfiles pour vous assister dans cette gestion.

Pour les fichiers css ou javascript, on procède de la même façon que pour les templates.

Créer un sous-dossier static puis un sous-dossier du nom de l’application.

blogue/static/blogue

Créer des sous-dossiers scripts et styles.

Dans le fichier html, on peut maintenant utiliser les fichiers css ou js comme dans l’exemple.

{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <link rel="stylesheet" href="{% static 'blogue/styles/bootstrap.min.css' %}">
  <title>Document</title>
</head>

Service des fichiers statiques en développement

Pour servir des fichiers statique en mode DEBUG, vous devez ajouter le code suivant dans le urlConf de votre application:

blogue/urls.py

from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    path('', views.index, name='index'),
    #Autres urls ici ....
]+ static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

Héritage de gabarits

L'héritage permet d'éviter la répétition de code dans les pages html. documentation