Les urls et paramètres urls django
Dans la partie précédente, on a vu comment gérer des formulaires HTML avec django.
Dans cet article, nous allons enrichir notre application Django en ajoutant la fonctionnalité de commentaires sur les messages.
Nous créerons également une nouvelle page de détail pour afficher un message original et tous ses commentaires associés.
Commençons par établir les bases de cette fonctionnalité.
1. Création de la fonction de Détail
Tout d’abord, nous allons ajouter une nouvelle fonction dans le fichier views.py
. Créez une fonction appelée details
qui prendra en paramètre l’objet request
. À l’intérieur de cette fonction, nous allons utiliser HttpResponse
, une fonction qui renvoie une simple réponse HTTP lorsque l’on accède à la page.
from django.http import HttpResponse
def details(request):
return HttpResponse("Ça marche")
2. Gestion des URLs
Nous devons maintenant lier cette fonction à une URL. Pour mieux organiser notre projet, nous allons gérer nos URLs au niveau de l’application plutôt qu’au niveau du projet global. Créez un fichier urls.py
dans le dossier de votre application feed
. Ce fichier ressemblera à celui qui existe déjà au niveau du projet.
from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name='index'),
path('details/<int:id>/', views.details, name='details'),
]
N’oubliez pas d’importer le fichier urls.py
de l’application dans le fichier urls.py
du projet principal :
from django.urls import include, path
urlpatterns = [
path('', include('feed.urls')),
]
3. Modification du Modèle
Pour gérer les commentaires, nous avons plusieurs options. Nous pourrions créer une nouvelle table comments
, mais cela serait redondant avec notre modèle message
, qui a déjà des champs similaires. Au lieu de cela, nous allons modifier directement le modèle message
pour y ajouter un champ response_to
, qui sera une clé étrangère pointant vers un autre message.
Dans votre fichier models.py
, ajoutez ce champ :
from django.db import models
class Message(models.Model):
content = models.TextField()
user = models.ForeignKey(User, on_delete=models.CASCADE)
response_to = models.ForeignKey('self', on_delete=models.CASCADE, null=True, blank=True)
Après avoir modifié le modèle, exécutez les commandes suivantes dans votre terminal :
python manage.py makemigrations
python manage.py migrate
4. Récupérer le Message Détail
Maintenant que notre modèle est prêt, nous allons rendre notre page de détail plus intéressante. Nous devons savoir de quel message il s’agit. Modifions notre fonction details
pour récupérer le message par son ID.
def details(request, id):
message = Message.objects.get(id=id)
context = {'message': message}
return render(request, 'details.html', context)
Créez maintenant le fichier details.html
dans votre dossier templates
. Dans ce fichier, nous afficherons le contenu du message :
<h1>{{ message.content }}</h1>
<p>Par : {{ message.user.username }}</p>
5. Affichage des Commentaires
Pour afficher les commentaires, nous devons récupérer tous les messages qui répondent au message parent. Ajoutons cette logique à notre fonction details
:
def details(request, id):
message = Message.objects.get(id=id)
comments = Message.objects.filter(response_to=message)
context = {'message': message, 'comments': comments}
return render(request, 'details.html', context)
Dans le fichier details.html
, ajoutez une boucle pour afficher les commentaires :
{% for comment in comments %}
<div>
<p>{{ comment.user.username }} a commenté : {{ comment.content }}</p>
</div>
{% endfor %}
6. Ajout d’un Formulaire de Commentaire
Nous devons également ajouter un formulaire sur la page de détail pour permettre aux utilisateurs de commenter le message. Ce formulaire ressemblera à celui que nous avons déjà sur notre page d’index. Nous allons donc créer un fichier HTML réutilisable pour le formulaire de commentaire.
Créez un fichier comment_form.html
dans votre dossier de templates :
<form method="post">
{% csrf_token %}
<textarea
name="content"
placeholder="Écrivez votre commentaire ici..."
></textarea>
<button type="submit">Commenter</button>
</form>
Ensuite, incluez ce formulaire dans votre page de détail :
{% include 'comment_form.html' %}
Conclusion
Nous avons maintenant une application Django qui permet d’afficher des messages avec des commentaires. La page de détail affiche un message spécifique ainsi que tous ses commentaires associés. Nous avons également mis en place un formulaire pour ajouter de nouveaux commentaires.
À ce stade, il est important de noter que nous avons accumulé du code qui se répète, ce qui pourrait nuire à la maintenabilité de notre application.
La prochaine étape consistera à explorer comment créer des fichiers HTML réutilisables et à introduire du CSS pour améliorer l’apparence de notre application.
Et dans la prochaine partie de ce tutoriel, voyons comment utiliser les blocs HTML comme includes et extends en django.
Je m'appelle Thomas, et je code depuis plus de 20 ans. Depuis ma sortie de la première promotion de l'École 42, j'ai conçu et développé des centaines d'applications et de sites web. Sur ce blog, je partage avec vous les stratégies les plus efficaces pour maîtriser l'art de coder et progresser rapidement.