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.
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
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.
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 :
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
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.
Les paramètres de chemin suivants sont disponibles par défaut :
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>
Voir la documentation afin d'avoir un aperçu du fonctionnement des gabarits.
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>
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)
L'héritage permet d'éviter la répétition de code dans les pages html. documentation