Vous n'avez pas besoin de vous embêter pour créer des slugs dans Django. Implémentez la génération automatique de slugs pour gagner du temps et rationaliser votre flux de travail.

En tant que développeur Web, l'optimisation de l'expérience utilisateur de votre application Web est cruciale. Pour améliorer l'expérience utilisateur et la visibilité des moteurs de recherche, utilisez des URL conviviales avec des slugs dans Django. Créer des URL avec des slugs est aussi simple que d'écrire une fonction, ce qui vous permet de générer des URL concises et descriptives faciles à comprendre pour les utilisateurs et les moteurs de recherche. Cela améliore la convivialité et l'accessibilité tout en améliorant le classement des moteurs de recherche.

Les exemples de code utilisés dans cet article se trouvent dans ce Référentiel GitHub.

Création d'un projet Django

Django fournit plusieurs méthodes pour générer des slugs et les utiliser sur votre site Web. Pour illustrer différentes manières d'implémenter les slugs, ce didacticiel vous guidera dans la création d'une application Web de blog simple.

instagram viewer

Avant de monter un projet Django, créer et activer un environnement virtuel pour installer les dépendances nécessaires. Après avoir activé votre environnement virtuel, suivez ces étapes pour configurer votre projet :

  • Installez Django en utilisant la commande pip dans votre ligne de commande:
pip installer Django
  • Créez un projet à l'aide de django-admin utilitaire. Ce tutoriel utilisera project_core comme nom de projet.
django-admin startproject project_core .
  • Créer une application nommée recettes.
Recettes d'application de démarrage python manage.py
  • Ajoutez votre application aux applications installées dans votre projet paramètre.py déposer.
INSTALLED_APPS = [
'...'
'recettes',
]
  • Exécutez votre application en saisissant la commande suivante dans votre outil de ligne de commande:
serveur d'exécution python manage.py
  • Aller vers http://127.0.0.1:8000/ dans votre navigateur. Vous devriez voir cette page:
  • Configurez le modèle d'URL dans votre projet urls.py déposer
depuis django.urls importer chemin, inclure

modèles d'url = [
'...',
chemin('', inclure('recettes.urls'))
]

Créer un Slug dans Django

Pour générer un slug dans Django, vous devez inclure un champ slug dans vos modèles. Suivez ces étapes pour créer un slug dans Django.

Créer un modèle

Dans ton modèles.py fichier, créez un nouveau modèle et incluez un champ slug. Voici un exemple :

classeRecette(des modèles. Modèle):
nom = modèles. CharField (max_length=225, vide=FAUX, nul=FAUX)
ingrédients = modèles. Champ de texte (vide=FAUX, nul=FAUX)
mode d'emploi = modèles. Champ de texte (vide=FAUX, nul=FAUX)
date_created = modèles. DateTimeField (auto_now=Vrai)
limace = modèles. SlugField (null = Vrai, vide=Vrai, unique=Vrai)

Dans l'exemple ci-dessus, le modèle Recette contient un champ nommé limace. Le limace champ a les attributs, nul et blanc mis à Vrai.

Appliquer des migrations à votre modèle

Après avoir créé un modèle, vous devez exécuter la commande suivante dans votre outil de ligne de commande pour créer la table dans votre base de données :

python manage.py makemigrations && python manage.py migrate

La commande ci-dessus générera d'abord un fichier de migration, puis mettra à jour la base de données en exécutant les instructions contenues dans le fichier de migration.

Ajouter des données à votre base de données

Enregistrez votre modèle en tapant ce qui suit dans votre admin.py déposer:

depuis django.contrib importer administrateur
depuis .des modèles importer Recette

admin.site.register (Recette)

Ensuite, ouvrez votre outil de ligne de commande et créez un superutilisateur pour votre panneau d'administration en exécutant cette commande :

python manage.py crée un superutilisateur

La commande ci-dessus vous guidera à travers les étapes décrites dans cette image :

Après avoir créé un superutilisateur, démarrez votre serveur local avec la commande suivante :

serveur d'exécution python manage.py

Une fois votre serveur démarré, vous devez naviguer vers http://127.0.0.1:8000/admin/, connectez-vous avec les informations que vous avez utilisées pour créer un superutilisateur, et ajoutez manuellement des recettes à votre base de données. Vous devriez faire attention au champ de limaces.

Créer des vues pour votre application

Ouvrez votre vues.py fichier et créez deux vues pour votre application. La première vue affichera simplement un aperçu de vos recettes tandis que la seconde donnera plus de détails sur chaque recette. Vous pouvez utiliser ces vues dans votre projet :

depuis django.raccourcis importer rendu, get_object_or_404
depuis .des modèles importer Recette

# Vue de liste pour les recettes
définitivementliste_de_recettes(demande):
recettes = Recette.objets.all()
retour rendre (demander, 'recettes/liste_recettes.html', {"recettes":recettes})

# Vue détaillée pour chaque recette
définitivementdétail_recette(demande, recette_slug):
recette = get_object_or_404(Recette, slug=recipe_slug)
retour rendre (demander, 'recettes/recipe_detail.html', {'recette': recette})

Dans l'extrait de code ci-dessus, le liste_de_recettes view renvoie la liste de toutes les recettes au modèle. D'autre part, le détail_recette view renvoie une seule recette au modèle. Cette vue intègre un paramètre supplémentaire appelé recette_slug qui est utilisé pour obtenir le slug pour une recette spécifique.

Configurer les modèles d'URL pour vos vues

Dans votre répertoire d'applications (ou recette dossier), créez un fichier appelé urls.py pour ajouter des chemins d'URL pour votre application. Voici un exemple:

depuis django.urls importer chemin
depuis .vues importer liste_recette, détail_recette

modèles d'url = [
chemin('', liste_recettes, nom='recette-maison'),
chemin('recette//', détail_recette, nom='recipe_detail'),
]

Dans l'extrait de code ci-dessus, le deuxième chemin introduit le slug dans l'URL de la page.

Créer des modèles pour votre application

Pour afficher les recettes dans le navigateur, créez des modèles pour vos vues. Un modèle devrait être pour le liste_de_recettes vue tandis que l'autre devrait être pour le détail_recette voir. Pour utiliser le slug dans votre modèle, suivez ce format, {% url 'view_name' recette.slug %}. Voici deux exemples que vous pouvez utiliser dans votre code :

 recettes/liste_de_recettes.html 
{% étend 'base.html' %}

{% bloque le contenu %}
<h1classe="my-5 text-center">Recettesh1>
<centre>
<ulclasse="liste-groupe w-75">
{% pour la recette dans les recettes %}
<liclasse="list-group-item my-3">
<h2classe="mb-3">
<unhref="{% url 'recipe_detail' recette.slug %}">
{{ recette.nom }}
un>
h2>
<pclasse="w-50">
Ingrédients: {{ recette.ingredients }}
p>
<pclasse="texte en sourdine">
Créé: {{ recette.date_created }}
p>
li>
{% vide %}
<liclasse="list-group-item">Aucune recette trouvée.li>
{% endfor %}
ul>
centre>
{% endblock %}

Le modèle HTML ci-dessus répertorie toutes les recettes de votre base de données et affiche Aucune recette trouvée s'il n'y a pas de recettes. Il utilise les classes Bootstrap pour le style. Vous pouvez apprendre à utiliser Bootstrap avec Django. Le modèle ci-dessus devrait ressembler à ceci dans le navigateur :

 recettes/recipe_detail.html 
{% étend 'base.html' %}

{% bloque le contenu %}
<centre>
<divclasse="w-75">
<h1classe="mt-5 mb-4">{{ recette.nom }}h1>
<h3>Ingrédientsh3>
<p>{{ recette.ingrédients }}p>
<h3>Instructionsh3>
<p>{{ recette.instructions }}p>
<pclasse="texte en sourdine">Créé: {{ recette.date_created }}p>
div>
centre>
{% endblock %}

Le modèle HTML ci-dessus renvoie des détails sur une recette spécifique. Sur le navigateur, la page ci-dessus devrait ressembler à ceci :

Vous remarquerez que l'URL contient désormais le slug que vous avez ajouté dans votre base de données pour chaque recette. Si vous ne comprenez pas le fonctionnement du système de modèles, vous devez d'abord apprendre héritage de modèle dans Django et L'architecture MVT de Django.

Générer automatiquement un slug dans Django

Avec les slugs, ce que vous voulez vraiment, c'est les générer automatiquement en fonction d'un champ de votre modèle. Pour ce faire, vous devez modifier le sauvegarder() dans votre modèle et spécifiez vos propres règles avant que les objets ne soient enregistrés dans la base de données. Voici un exemple simple que vous pouvez ajouter à votre classe de modèle :

# importer lentement
depuis django.template.defaultfilters importer paresser

définitivementsauvegarder(soi, *args, **kwargs):
sipas self.slug :
self.slug = slugifier (self.nom)
super().save(*args, **kwargs)

La fonction ci-dessus vérifie d'abord si un slug existe pour l'objet modèle. S'il n'y a pas de slug, il utilise le paresser fonction pour en générer un à partir du champ de nom dans le modèle. Après avoir remplacé le sauvegarder() méthode, ouvrez votre panneau d'administration et ajoutez quelques recettes. Cette fois, vous n'avez pas à remplir le champ slug car il sera automatiquement rempli une fois que vous aurez enregistré votre recette.

Si vous accédez à la page de détails de votre recette nouvellement ajoutée, vous verrez que l'URL utilise le nom de la recette comme slug.

Parfois, vous aurez plusieurs recettes avec le même nom et cela provoquera des erreurs dans votre slug. Vous pouvez résoudre ce problème en ajoutant un élément unique à votre slug, comme la date de création. Voici un exemple simple :

self.slug = slugifier (self.nom + "-" + str (self.date_created))

Utilisez des slugs pour améliorer l'expérience URL

Contrairement au bon vieux paquet, les slugs offrent de nombreux avantages, notamment la flexibilité et la portabilité, car ils ne sont pas liés à des identifiants d'URL spécifiques tels que la clé primaire. Par conséquent, si vous modifiez la structure de votre base de données ou migrez vos données, vous pouvez toujours conserver des URL cohérentes. Les slugs améliorent également la convivialité SEO.