Du behöver inte krångla för att skapa sniglar i Django. Implementera automatisk sluggenerering för att spara tid och effektivisera ditt arbetsflöde.

Som webbutvecklare är det avgörande att optimera användarupplevelsen av din webbapp. För att förbättra användarupplevelsen och sökmotorns synlighet, använd användarvänliga webbadresser med sniglar i Django. Att skapa webbadresser med sniglar är lika enkelt som att skriva en funktion, vilket gör att du kan skapa kortfattade och beskrivande webbadresser som är lätta för användare och sökmotorer att förstå. Detta förbättrar användbarheten och tillgängligheten samtidigt som det ökar sökmotorernas ranking.

Kodexemplen som används i den här artikeln finns i den här GitHub-förråd.

Skapa ett Django-projekt

Django tillhandahåller flera metoder för att generera sniglar och använda dem på din webbplats. För att illustrera olika sätt att implementera sniglar, kommer denna handledning att leda dig genom att bygga en enkel bloggwebbapplikation.

Innan du startar ett Django-projekt,

instagram viewer
skapa och aktivera en virtuell miljö för att installera nödvändiga beroenden. När du har aktiverat din virtuella miljö, följ dessa steg för att konfigurera ditt projekt:

  • Installera Django genom att använda pip-kommandot på din kommandorad:
pip installera django
  • Skapa ett projekt med hjälp av django-admin verktyg. Denna handledning kommer att använda project_core som projektnamn.
django-admin startproject project_core .
  • Skapa en app som heter recept.
python manage.py startapp-recept
  • Lägg till din app till de installerade apparna i ditt projekt setting.py fil.
INSTALLED_APPS = [
'...'
"recept",
]
  • Kör din applikation genom att skriva följande kommando i ditt kommandoradsverktyg:
python manage.py runserver
  • Navigera till http://127.0.0.1:8000/ i din webbläsare. Du bör se den här sidan:
  • Konfigurera URL-mönstret i ditt projekts urls.py fil
från django.urls importera väg, inkludera

urlpatterns = [
'...',
väg('', inkludera('recipes.urls'))
]

Skapa en snigel i Django

För att generera en snigel i Django måste du inkludera ett snigelfält i dina modeller. Följ dessa steg för att skapa en snigel i Django.

Skapa en modell

I din models.py fil, skapa en ny modell och inkludera ett snigelfält. Här är ett exempel:

klassRecept(modeller. Modell):
namn = modeller. CharField (max_length=225, blank=Falsk, null=Falsk)
ingredienser = modeller. TextField (tomt=Falsk, null=Falsk)
instruktioner = modeller. TextField (tomt=Falsk, null=Falsk)
date_created = modeller. DateTimeField (auto_now=Sann)
snigel = modeller. SlugField (null = Sann, blank=Sann, unik=Sann)

I exemplet ovan, modellen Recept innehåller ett fält med namnet snigel. De snigel fältet har attributen, null och tom satt till Sann.

Tillämpa migrering på din modell

När du har skapat en modell bör du köra följande kommando i ditt kommandoradsverktyg för att skapa tabellen i din databas:

python manage.py makemigrations && python manage.py migrera

Kommandot ovan genererar först en migreringsfil och uppdaterar sedan databasen genom att utföra instruktionerna i migreringsfilen.

Lägg till data i din databas

Registrera din modell genom att skriva följande i din admin.py fil:

från django.contrib importera administration
från .modeller importera Recept

admin.site.register (recept)

Öppna sedan ditt kommandoradsverktyg och skapa en superanvändare för din adminpanel genom att köra detta kommando:

python manage.py createsuperuser

Ovanstående kommando tar dig genom stegen som visas i den här bilden:

Efter att ha skapat en superanvändare, starta din lokala server med följande kommando:

python manage.py runserver

När din server startar bör du navigera till http://127.0.0.1:8000/admin/, logga in med de uppgifter du använde för att skapa en superanvändare, och manuellt lägga till några recept till din databas. Du bör vara uppmärksam på snigelfältet.

Skapa vyer för din app

Öppna din views.py fil och skapa två vyer för din app. Den första vyn visar helt enkelt en översikt över dina recept medan den andra ger mer information om varje recept. Du kan använda dessa vyer i ditt projekt:

från django.shortcuts importera render, get_object_or_404
från .modeller importera Recept

# Listvy för recept
defreceptlista(begäran):
recept = Recipe.objects.all()
lämna tillbaka rendera (begäran, 'recipes/recipe_list.html', {"recept":recept})

# Detaljvy för varje recept
defrecept_detalj(request, recipe_slug):
recept = get_object_or_404(Recept, snigel=recept_snigel)
lämna tillbaka rendera (begäran, 'recipes/recipe_detail.html', {'recept': recept})

I kodavsnittet ovan visas receptlista view returnerar listan över alla recept till mallen. Å andra sidan recept_detalj vyn returnerar ett enstaka recept till mallen. Denna vy tar in en extra parameter som kallas recept_snigel som används för att få snigeln för ett specifikt recept.

Konfigurera URL-mönster för dina vyer

I din appkatalog (eller recept mapp), skapa en fil som heter urls.py för att lägga till webbadresssökvägar för din app. Här är ett exempel:

från django.urls importera väg
från .visningar importera receptlista, recept_detalj

urlpatterns = [
väg('', receptlista, namn="recept-hem"),
väg('recept//', recept_detalj, namn="recept_detalj"),
]

I kodavsnittet ovan introducerar den andra sökvägen snigeln i webbadressen för sidan.

Skapa mallar för din app

För att visa recepten i webbläsaren, skapa mallar för dina vyer. En mall bör vara för receptlista visa medan den andra ska vara för recept_detalj se. För att använda snigeln i din mall, följ detta format, {% url 'view_name' recipe.slug %}. Här är två exempel som du kan använda i din kod:

 recept/recept_lista.html 
{% utökar 'base.html' %}

{% block content %}
<h1klass="my-5 text-center">Recepth1>
<Centrum>
<ulklass="lista-grupp w-75">
{% för recept i recept %}
<liklass="list-grupp-objekt min-3">
<h2klass="mb-3">
<ahref="{% url 'recipe_detail' recipe.slug %}">
{{ recept.namn }}
a>
h2>
<sidklass="w-50">
Ingredienser: {{ recipe.ingredients }}
sid>
<sidklass="textavstängd">
Skapad: {{ recipe.date_created }}
sid>
li>
{% tom %}
<liklass="lista-grupp-objekt">Inga recept hittades.li>
{% slutför %}
ul>
Centrum>
{% slutblock %}

HTML-mallen ovan kommer att lista ut alla recept i din databas och visas Inga recept hittades om det inte finns några recept. Den använder Bootstrap-klasser för styling. Du kan lära dig hur använd Bootstrap med Django. Ovanstående mall ska se ut så här i webbläsaren:

 recept/recept_detalj.html 
{% utökar 'base.html' %}

{% block content %}
<Centrum>
<divklass="w-75">
<h1klass="mt-5 mb-4">{{ recept.namn }}h1>
<h3>Ingredienserh3>
<sid>{{ recept.ingredienser }}sid>
<h3>Instruktionerh3>
<sid>{{ recept.instruktioner }}sid>
<sidklass="textavstängd">Skapad: {{ recipe.date_created }}sid>
div>
Centrum>
{% slutblock %}

HTML-mallen ovan returnerar information om ett specifikt recept. På webbläsaren bör sidan ovan se ut så här:

Du kommer att märka att URL: en nu innehåller vilken snigel du lagt till i din databas för varje recept. Om du inte förstår hur mallsystemet fungerar bör du först lära dig mallarv i Django och Djangos MVT-arkitektur.

Generera automatiskt en snigel i Django

Med sniglar, vad du verkligen vill är att automatiskt generera dem baserat på ett fält i din modell. För att göra detta måste du ändra spara() metod i din modell och ange dina egna regler innan objekt sparas i databasen. Här är ett enkelt exempel som du kan lägga till i din modellklass:

# importera slugify
från django.template.defaultfilters importera förslöja

defspara(själv, *args, **kwargs):
ominte self.slug:
self.slug = slugify (self.name)
super().save(*args, **kwargs)

Ovanstående funktion kontrollerar först om det finns en slug för modellobjektet. Om det inte finns någon snigel, använder den förslöja funktion för att generera en från namnfältet i modellen. Efter att ha åsidosatt spara() metod, öppna din adminpanel och lägg till några recept. Den här gången behöver du inte fylla i snigelfältet eftersom det automatiskt fylls i när du har sparat ditt recept.

Om du navigerar till informationssidan för ditt nyligen tillagda recept, ser du att URL: en använder receptnamnet som snigel.

Ibland har du flera recept med samma namn och det kommer att orsaka fel i din snigel. Du kan fixa detta genom att lägga till ett unikt element till din snigel, till exempel datumet som skapades. Här är ett enkelt exempel:

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

Använd Slugs för att förbättra URL-upplevelsen

Till skillnad från den gamla goda pk, ger sniglar många fördelar inklusive flexibilitet och portabilitet eftersom de inte är knutna till specifika URL-identifierare som den primära nyckeln. Därför, om du ändrar din databasstruktur eller migrerar dina data, kan du fortfarande behålla konsekventa webbadresser. Sniglar förbättrar också SEO-vänligheten.