Du behøver ikke besvære dig med at skabe snegle i Django. Implementer automatisk slug-generering for at spare tid og strømline din arbejdsgang.

Som webudvikler er det afgørende at optimere brugeroplevelsen af ​​din webapp. For at forbedre brugeroplevelsen og søgemaskinens synlighed skal du bruge brugervenlige URL'er med slugs i Django. Oprettelse af URL'er med slugs er lige så let som at skrive en funktion, hvilket giver dig mulighed for at generere kortfattede og beskrivende URL'er, som er nemme for brugere og søgemaskiner at forstå. Dette forbedrer brugervenlighed og tilgængelighed, samtidig med at søgemaskinernes placeringer øges.

Kodeeksemplerne brugt i denne artikel kan findes i denne GitHub-depot.

Oprettelse af et Django-projekt

Django tilbyder flere metoder til at generere snegle og bruge dem på din hjemmeside. For at illustrere forskellige måder at implementere snegle på, vil denne tutorial guide dig gennem opbygningen af ​​en simpel blog-webapplikation.

Før du opretter et Django-projekt,

instagram viewer
skabe og aktivere et virtuelt miljø at installere de nødvendige afhængigheder. Når du har aktiveret dit virtuelle miljø, skal du følge disse trin for at konfigurere dit projekt:

  • Installer Django ved at bruge pip-kommandoen på din kommandolinje:
pip installer django
  • Opret et projekt ved at bruge django-admin nytte. Denne tutorial vil bruge projekt_kerne som projektnavn.
django-admin startproject project_core .
  • Opret en app med navnet opskrifter.
python manage.py startapp opskrifter
  • Føj din app til de installerede apps i dit projekt setting.py fil.
INSTALLED_APPS = [
'...'
'opskrifter',
]
  • Kør dit program ved at skrive følgende kommando i dit kommandolinjeværktøj:
python manage.py runserver
  • Naviger til http://127.0.0.1:8000/ i din browser. Du bør se denne side:
  • Konfigurer URL-mønsteret i dit projekts urls.py fil
fra django.urls importere sti, medtage

urlpatterns = [
'...',
sti('', inkluderer ('recipes.urls'))
]

Oprettelse af en snegl i Django

For at generere en snegl i Django skal du inkludere et sneglefelt i dine modeller. Følg disse trin for at oprette en slug i Django.

Opret en model

I din models.py fil, opret en ny model og medtag et sneglefelt. Her er et eksempel:

klasseOpskrift(modeller. Model):
navn = modeller. CharField (max_length=225, blank=Falsk, null=Falsk)
ingredienser = modeller. Tekstfelt (blank=Falsk, null=Falsk)
instruktioner = modeller. Tekstfelt (blank=Falsk, null=Falsk)
date_created = modeller. DateTimeField (auto_now=Rigtigt)
slug = modeller. SlugField (null = Rigtigt, blank=Rigtigt, unik=Rigtigt)

I ovenstående eksempel er modellen Opskrift indeholder et felt med navn snegl. Det snegl felt har attributterne, nul og blank indstillet til Rigtigt.

Anvend migreringer på din model

Efter at have oprettet en model, skal du køre følgende kommando i dit kommandolinjeværktøj for at oprette tabellen i din database:

python manage.py makemigrationer && python manage.py migrere

Ovenstående kommando vil først generere en migreringsfil og derefter opdatere databasen ved at udføre instruktionerne i migrationsfilen.

Tilføj data til din database

Registrer din model ved at skrive følgende i din admin.py fil:

fra django.contrib importere admin
fra .modeller importere Opskrift

admin.site.register (opskrift)

Åbn derefter dit kommandolinjeværktøj og opret en superbruger for dit admin panel ved at køre denne kommando:

python manage.py createsuperuser

Ovenstående kommando vil tage dig gennem trinene afbildet i dette billede:

Efter at have oprettet en superbruger, start din lokale server med følgende kommando:

python manage.py runserver

Når din server starter, skal du navigere til http://127.0.0.1:8000/admin/, log ind med de oplysninger, du brugte til at oprette en superbruger, og manuelt tilføje nogle opskrifter til din database. Du bør være opmærksom på sneglefeltet.

Opret visninger til din app

Åben din views.py fil og opret to visninger til din app. Den første visning vil blot vise en oversigt over dine opskrifter, mens den anden vil give flere detaljer om hver opskrift. Du kan bruge disse visninger i dit projekt:

fra django.genveje importere render, get_objekt_eller_404
fra .modeller importere Opskrift

# Listevisning for opskrifter
defopskriftsliste(anmodning):
opskrifter = Recipe.objects.all()
Vend tilbage gengive (anmodning, 'recipes/recipe_list.html', {"opskrifter":opskrifter})

# Detaljeret visning for hver opskrift
defopskriftsdetaljer(request, recipe_slug):
opskrift = get_object_or_404(Opskrift, slug=opskrift_snegl)
Vend tilbage gengive (anmodning, 'recipes/recipe_detail.html', {'opskrift': opskrift})

I ovenstående kodestykke er opskriftsliste view returnerer listen over alle opskrifterne til skabelonen. På den anden side opskriftsdetaljer view returnerer en enkelt opskrift til skabelonen. Denne visning tager en ekstra parameter kaldet opskriftssnegl som bruges til at få sneglen til en bestemt opskrift.

Konfigurer URL-mønstre til dine visninger

I din app-mappe (eller opskrift mappe), opret en fil kaldet urls.py for at tilføje URL-stier til din app. Her er et eksempel:

fra django.urls importere sti
fra .visninger importere opskriftsliste, opskriftsdetalje

urlpatterns = [
sti('', opskriftsliste, navn='opskrift-hjem'),
sti('opskrift//', opskriftsdetaljer, navn='recipe_detail'),
]

I ovenstående kodestykke introducerer den anden sti sneglen i URL'en for siden.

Opret skabeloner til din app

For at vise opskrifterne i browseren skal du oprette skabeloner til dine visninger. Én skabelon skal være til opskriftsliste udsigt, mens den anden skal være til opskriftsdetaljer udsigt. For at bruge sneglen i din skabelon, følg dette format, {% url 'view_name' recipe.slug %}. Her er to eksempler, du kan bruge i din kode:

 opskrifter/recipe_list.html 
{% udvider 'base.html' %}

{% bloker indhold %}
<h1klasse="mit-5 tekstcenter">Opskrifterh1>
<centrum>
<ulklasse="liste-gruppe w-75">
{% for opskrift i opskrifter %}
<liklasse="liste-gruppe-element min-3">
<h2klasse="mb-3">
<-enhref="{% url 'recipe_detail' recipe.slug %}">
{{ opskrift.navn }}
-en>
h2>
<sklasse="w-50">
Ingredienser: {{ recipe.ingredients }}
s>
<sklasse="tekst-dæmpet">
Oprettet: {{ recipe.date_created }}
s>
li>
{% tom %}
<liklasse="liste-gruppe-element">Ingen opskrifter fundet.li>
{% endfor %}
ul>
centrum>
{% slutblok %}

Ovenstående HTML-skabelon viser alle opskrifterne i din database og vises Ingen opskrifter fundet hvis der ikke er nogen opskrifter. Den bruger Bootstrap-klasser til styling. Du kan lære hvordan brug Bootstrap med Django. Ovenstående skabelon skal se sådan ud i browseren:

 recipes/recipe_detail.html 
{% udvider 'base.html' %}

{% bloker indhold %}
<centrum>
<divklasse="w-75">
<h1klasse="mt-5 mb-4">{{ opskrift.navn }}h1>
<h3>ingredienserh3>
<s>{{ recipe.ingredients }}s>
<h3>Instruktionerh3>
<s>{{ recipe.instructions }}s>
<sklasse="tekst-dæmpet">Oprettet: {{ recipe.date_created }}s>
div>
centrum>
{% slutblok %}

HTML-skabelonen ovenfor returnerer detaljer om en bestemt opskrift. På browseren skulle ovenstående side se sådan ud:

Du vil bemærke, at URL'en nu indeholder den slug, du tilføjede i din database for hver opskrift. Hvis du ikke forstår, hvordan skabelonsystemet fungerer, bør du først lære det skabelonarv i Django og Djangos MVT-arkitektur.

Generer automatisk en snegl i Django

Med snegle er det, du virkelig ønsker, at generere dem automatisk baseret på et felt i din model. For at gøre dette skal du ændre Gemme() metode i din model og specificer dine egne regler, før objekter gemmes i databasen. Her er et simpelt eksempel, du kan tilføje til din modelklasse:

# importer slugify
fra django.template.defaultfiltre importere sløve

defGemme(selv, *args, **kwargs):
hvisikke self.slug:
self.slug = slugify (selv.navn)
super().save(*args, **kwargs)

Ovenstående funktion kontrollerer først, om der findes en slug for modelobjektet. Hvis der ikke er nogen snegl, bruger den sløve funktion til at generere en fra navnefeltet i modellen. Efter at have tilsidesat Gemme() metode, skal du åbne dit admin panel og tilføje nogle opskrifter. Denne gang behøver du ikke at udfylde sneglefeltet, fordi det automatisk bliver udfyldt, når du har gemt din opskrift.

Hvis du navigerer til detaljeringssiden for din nyligt tilføjede opskrift, vil du se, at URL'en bruger opskriftens navn som sneglen.

Nogle gange har du flere opskrifter med det samme navn, og det vil forårsage fejl i din snegl. Du kan rette dette ved at tilføje et unikt element til din slug, såsom datoen oprettet. Her er et simpelt eksempel:

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

Brug Slugs til at forbedre URL-oplevelsen

I modsætning til de gode gamle pk, giver snegle mange fordele, herunder fleksibilitet og portabilitet, da de ikke er bundet til specifikke URL-identifikatorer såsom den primære nøgle. Derfor, hvis du ændrer din databasestruktur eller migrerer dine data, kan du stadig bevare ensartede URL'er. Snegle forbedrer også SEO-venlighed.