Non devi preoccuparti di creare slug in Django. Implementa la generazione automatica di slug per risparmiare tempo e semplificare il tuo flusso di lavoro.

In qualità di sviluppatore web, l'ottimizzazione dell'esperienza utente della tua app web è fondamentale. Per migliorare l'esperienza utente e la visibilità sui motori di ricerca, utilizza URL intuitivi con slug in Django. Creare URL con slug è facile come scrivere una funzione, permettendoti di generare URL concisi e descrittivi facili da capire per utenti e motori di ricerca. Ciò migliora l'usabilità e l'accessibilità aumentando al contempo il posizionamento nei motori di ricerca.

Gli esempi di codice utilizzati in questo articolo sono disponibili in this Deposito GitHub.

Creazione di un progetto Django

Django fornisce diversi metodi per generare slug e utilizzarli sul tuo sito web. Per illustrare diversi modi per implementare gli slug, questo tutorial ti guiderà attraverso la creazione di una semplice applicazione web per blog.

Prima di impostare un progetto Django,

instagram viewer
creare e attivare un ambiente virtuale per installare le dipendenze necessarie. Dopo aver attivato il tuo ambiente virtuale, segui questi passaggi per impostare il tuo progetto:

  • Installa Django utilizzando il comando pip nella riga di comando:
pip installa django
  • Creare un progetto utilizzando il file django-admin utilità. Questo tutorial utilizzerà core_progetto come nome del progetto.
django-admin startproject project_core .
  • Crea un'app denominata ricette.
ricette python manage.py startapp
  • Aggiungi la tua app alle app installate nel tuo progetto impostazione.py file.
APP_INSTALLATE = [
'...'
'ricette',
]
  • Esegui la tua applicazione digitando il seguente comando nello strumento della riga di comando:
python manage.py esegue il server
  • Navigare verso http://127.0.0.1:8000/ nel tuo browser. Dovresti vedere questa pagina:
  • Configura il pattern URL nel tuo progetto URL.py file
da django.urls importare percorso, includere

schemi URL = [
'...',
sentiero('', includere('ricette.url'))
]

Creazione di una lumaca in Django

Per generare uno slug in Django, devi includere un campo slug nei tuoi modelli. Segui questi passaggi per creare uno slug in Django.

Crea un modello

Nel tuo modelli.py file, creare un nuovo modello e includere un campo slug. Ecco un esempio:

classeRicetta(Modelli. Modello):
nome = modelli. CharField (lunghezza_max=225, vuoto=Falso, nullo=Falso)
ingredienti = modelli. Campo di testo (vuoto=Falso, nullo=Falso)
istruzioni = modelli. Campo di testo (vuoto=Falso, nullo=Falso)
date_created = modelli. DateTimeField (auto_now=VERO)
lumaca = modelli. SlugField (nullo = VERO, vuoto=VERO, unico=VERO)

Nell'esempio precedente, il modello Ricetta contiene un campo denominato lumaca. IL lumaca campo ha gli attributi, nullo E vuoto impostato VERO.

Applica le migrazioni al tuo modello

Dopo aver creato un modello, dovresti eseguire il seguente comando nel tuo strumento a riga di comando per creare la tabella nel tuo database:

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

Il comando precedente genererà prima un file di migrazione e quindi aggiornerà il database eseguendo le istruzioni all'interno del file di migrazione.

Aggiungi dati al tuo database

Registra il tuo modello digitando quanto segue nel tuo admin.py file:

da django.contrib importare admin
da .Modelli importare Ricetta

admin.site.register (Ricetta)

Quindi, apri il tuo strumento da riga di comando e crea un file superutente per il tuo pannello di amministrazione eseguendo questo comando:

python manage.py createsuperuser

Il comando precedente ti guiderà attraverso i passaggi rappresentati in questa immagine:

Dopo aver creato un superutente, avvia il tuo server locale con il seguente comando:

python manage.py esegue il server

Una volta avviato il server, dovresti accedere a http://127.0.0.1:8000/admin/, accedi con i dettagli che hai utilizzato per creare un superutentee aggiungi manualmente alcune ricette al tuo database. Dovresti prestare attenzione al campo di lumache.

Crea viste per la tua app

Apri i tuoi viste.py file e crea due viste per la tua app. La prima visualizzazione mostrerà semplicemente una panoramica delle tue ricette, mentre la seconda fornirà maggiori dettagli su ciascuna ricetta. Puoi utilizzare queste viste nel tuo progetto:

da django.scorciatoie importare render, get_object_or_404
da .Modelli importare Ricetta

# Visualizzazione elenco per le ricette
defelenco_ricette(richiesta):
ricette = Ricetta.objects.all()
ritorno rendere (richiesta, 'ricette/elenco_ricette.html', {"ricette":ricette})

# Vista dettagliata per ogni ricetta
defricetta_dettaglio(richiesta, ricetta_slug):
ricetta = get_object_or_404(Ricetta, slug=recipe_slug)
ritorno rendere (richiesta, 'ricette/dettaglio_ricetta.html', {'ricetta': ricetta})

Nel frammento di codice sopra, il file elenco_ricette view restituisce al template l'elenco di tutte le ricette. D'altra parte, il ricetta_dettaglio view restituisce una singola ricetta al modello. Questa vista accetta un parametro aggiuntivo chiamato ricetta_slug che viene utilizzato per ottenere la lumaca per una ricetta specifica.

Configura i pattern URL per le tue viste

Nella directory dell'app (o ricetta cartella), creare un file chiamato URL.py per aggiungere percorsi URL per la tua app. Ecco un esempio:

da django.urls importare sentiero
da .visualizzazioni importare lista_ricetta, dettaglio_ricetta

schemi URL = [
sentiero('', lista_ricetta, nome='ricetta casalinga'),
sentiero('ricetta//', dettaglio_ricetta, nome='dettaglio_ricetta'),
]

Nello snippet di codice precedente, il secondo percorso introduce lo slug nell'URL della pagina.

Crea modelli per la tua app

Per visualizzare le ricette nel browser, crea modelli per le tue visualizzazioni. Un modello dovrebbe essere per il elenco_ricette view mentre l'altro dovrebbe essere per il ricetta_dettaglio visualizzazione. Per utilizzare lo slug nel tuo modello, segui questo formato, {% url 'view_name' ricetta.slug %}. Ecco due esempi che puoi utilizzare nel tuo codice:

 ricette/elenco_ricette.html 
{% estende 'base.html' %}

{% blocca contenuto %}
<h1classe="my-5 text-center">Ricetteh1>
<centro>
<Ulclasse="list-group w-75">
{% per la ricetta nelle ricette %}
<liclasse="list-group-item my-3">
<h2classe="mb-3">
<UNhref="{% url 'recipe_detail' ricetta.slug %}">
{{ nome.ricetta }}
UN>
h2>
<Pclasse="w-50">
Ingredienti: {{ricetta.ingredienti}}
P>
<Pclasse="testo disattivato">
Creazione: {{ ricetta.data_creata }}
P>
li>
{% vuoto %}
<liclasse="elemento-gruppo-lista">Nessuna ricetta trovatali>
{% fine per %}
Ul>
centro>
{% blocco finale %}

Il modello HTML sopra elencherà tutte le ricette nel tuo database e le visualizzerà Nessuna ricetta trovata se non ci sono ricette. Utilizza le classi Bootstrap per lo styling. Puoi imparare a farlo usa Bootstrap con Django. Il modello sopra dovrebbe apparire così nel browser:

 ricette/dettaglio_ricetta.html 
{% estende 'base.html' %}

{% blocca contenuto %}
<centro>
<divclasse="w-75">
<h1classe="mt-5 mb-4">{{ nome.ricetta }}h1>
<h3>ingredientih3>
<P>{{ ricetta.ingredienti }}P>
<h3>Istruzionih3>
<P>{{ ricetta.istruzioni }}P>
<Pclasse="testo disattivato">Creazione: {{ ricetta.data_creata }}P>
div>
centro>
{% blocco finale %}

Il modello HTML riportato sopra restituisce dettagli su una ricetta specifica. Sul browser, la pagina sopra dovrebbe apparire così:

Noterai che l'URL ora contiene qualsiasi lumaca che hai aggiunto nel tuo database per ogni ricetta. Se non capisci come funziona il sistema dei modelli, dovresti prima imparare ereditarietà del modello in Django E L'architettura MVT di Django.

Genera automaticamente uno slug in Django

Con gli slug, quello che vuoi veramente è generarli automaticamente in base a un campo nel tuo modello. Per fare ciò, devi modificare il file salva() metodo nel modello e specificare le proprie regole prima che gli oggetti vengano salvati nel database. Ecco un semplice esempio che puoi aggiungere alla classe del tuo modello:

# importa slugify
da django.template.defaultfilters importare slugificare

defsalva(self, *args, **kwargs):
Senon self.slug:
self.slug = slugify (self.nome)
super().save(*args, **kwargs)

La funzione sopra controlla prima se esiste uno slug per l'oggetto del modello. Se non c'è lumaca, usa il slugificare funzione per generarne uno dal campo del nome nel modello. Dopo aver ignorato il salva() metodo, apri il tuo pannello di amministrazione e aggiungi alcune ricette. Questa volta, non devi compilare il campo slug perché verrà popolato automaticamente una volta salvata la ricetta.

Se accedi alla pagina dei dettagli della ricetta appena aggiunta, vedrai che l'URL utilizza il nome della ricetta come lumaca.

A volte, avrai più ricette con lo stesso nome e questo causerà errori nella tua lumaca. Puoi risolvere questo problema aggiungendo un elemento univoco alla tua lumaca come la data di creazione. Ecco un semplice esempio:

self.slug = slugify (self.nome + "-" + str (self.date_created))

Usa Slug per migliorare l'esperienza dell'URL

A differenza del buon vecchio pk, gli slug offrono molti vantaggi tra cui flessibilità e portabilità poiché non sono legati a identificatori URL specifici come la chiave primaria. Pertanto, se modifichi la struttura del database o esegui la migrazione dei dati, puoi comunque mantenere URL coerenti. Le lumache migliorano anche la facilità di SEO.