Du trenger ikke bry deg for å lage snegler i Django. Implementer automatisk sluggenerering for å spare tid og strømlinjeforme arbeidsflyten din.

Som nettutvikler er det avgjørende å optimalisere brukeropplevelsen av nettappen din. For å forbedre brukeropplevelsen og søkemotorens synlighet, bruk brukervennlige URL-er med slugs i Django. Å lage URL-er med slugs er like enkelt som å skrive en funksjon, slik at du kan generere konsise og beskrivende URL-er som er enkle for brukere og søkemotorer å forstå. Dette forbedrer brukervennligheten og tilgjengeligheten samtidig som det øker søkemotorrangeringen.

Kodeeksemplene som brukes i denne artikkelen finner du i denne GitHub-depot.

Opprette et Django-prosjekt

Django tilbyr flere metoder for å generere snegler og bruke dem på nettstedet ditt. For å illustrere forskjellige måter å implementere snegler på, vil denne opplæringen lede deg gjennom å bygge en enkel bloggwebapplikasjon.

Før du setter opp et Django-prosjekt, opprette og aktivere et virtuelt miljø

instagram viewer
å installere de nødvendige avhengighetene. Etter å ha aktivert det virtuelle miljøet, følg disse trinnene for å sette opp prosjektet:

  • Installer Django ved å bruke pip-kommandoen på kommandolinjen:
pip installer django
  • Lag et prosjekt ved å bruke django-admin nytte. Denne opplæringen vil bruke prosjektkjerne som prosjektnavn.
django-admin startproject project_core .
  • Lag en app som heter oppskrifter.
python manage.py startapp-oppskrifter
  • Legg til appen din til de installerte appene i prosjektet ditt setting.py fil.
INSTALLED_APPS = [
'...'
"oppskrifter",
]
  • Kjør programmet ved å skrive inn følgende kommando i kommandolinjeverktøyet:
python manage.py runserver
  • Navigere til http://127.0.0.1:8000/ i nettleseren din. Du bør se denne siden:
  • Konfigurer URL-mønsteret i prosjektet ditt urls.py fil
fra django.urls import sti, inkludere

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

Opprette en snegl i Django

For å generere en snegle i Django, må du inkludere et sneglefelt i modellene dine. Følg disse trinnene for å lage en snegle i Django.

Lag en modell

I din models.py fil, opprette en ny modell og inkludere et sneglefelt. Her er et eksempel:

klasseOppskrift(modeller. Modell):
navn = modeller. CharField (max_length=225, blank=Falsk, null=Falsk)
ingredienser = modeller. Tekstfelt (blank=Falsk, null=Falsk)
instruksjoner = modeller. Tekstfelt (blank=Falsk, null=Falsk)
date_created = modeller. DateTimeField (auto_now=ekte)
slug = modeller. SlugField (null = ekte, blank=ekte, unik=ekte)

I eksemplet ovenfor, modellen Oppskrift inneholder et felt med navn mordersnegle. De mordersnegle feltet har attributtene, null og blank satt til ekte.

Bruk migreringer på modellen din

Etter å ha opprettet en modell, bør du kjøre følgende kommando i kommandolinjeverktøyet for å lage tabellen i databasen:

python manage.py makemigrations && python manage.py migrere

Kommandoen ovenfor vil først generere en migreringsfil og deretter oppdatere databasen ved å utføre instruksjonene i migreringsfilen.

Legg til data i databasen din

Registrer din modell ved å skrive inn følgende i din admin.py fil:

fra django.contrib import admin
fra .modeller import Oppskrift

admin.site.register (oppskrift)

Deretter åpner du kommandolinjeverktøyet og lager en superbruker for administrasjonspanelet ditt ved å kjøre denne kommandoen:

python manage.py createsuperuser

Kommandoen ovenfor tar deg gjennom trinnene som er avbildet i dette bildet:

Etter å ha opprettet en superbruker, start din lokale server med følgende kommando:

python manage.py runserver

Når serveren din starter, bør du navigere til http://127.0.0.1:8000/admin/, logg på med detaljene du brukte til å opprette en superbruker, og legg til noen oppskrifter manuelt i databasen din. Du bør være oppmerksom på sneglefeltet.

Lag visninger for appen din

Åpne din views.py fil og lag to visninger for appen din. Den første visningen vil ganske enkelt vise en oversikt over oppskriftene dine, mens den andre vil gi flere detaljer om hver oppskrift. Du kan bruke disse visningene i prosjektet ditt:

fra django.snarveier import render, get_object_or_404
fra .modeller import Oppskrift

# Listevisning for oppskrifter
defoppskriftsliste(be om):
oppskrifter = Recipe.objects.all()
komme tilbake gjengi (forespørsel, 'recipes/recipe_list.html', {"oppskrifter":oppskrifter})

# Detaljvisning for hver oppskrift
defrecipe_detail(forespørsel, recipe_slug):
oppskrift = get_object_or_404(Recipe, slug=recipe_slug)
komme tilbake gjengi (forespørsel, 'recipes/recipe_detail.html', {'oppskrift': oppskrift})

I kodebiten ovenfor er oppskriftsliste view returnerer listen over alle oppskriftene til malen. På den annen side recipe_detail visning returnerer en enkelt oppskrift til malen. Denne visningen tar inn en ekstra parameter kalt recipe_slug som brukes til å få sneglen for en bestemt oppskrift.

Konfigurer URL-mønstre for visningene dine

I appkatalogen din (eller oppskrift mappe), opprette en fil som heter urls.py for å legge til URL-baner for appen din. Her er et eksempel:

fra django.urls import sti
fra .visninger import oppskriftsliste, oppskriftsdetalj

urlpatterns = [
sti('', oppskriftsliste, navn='oppskrift-hjem'),
sti('oppskrift//', recipe_detail, name='recipe_detail'),
]

I kodebiten ovenfor introduserer den andre banen sneglen i URL-en til siden.

Lag maler for appen din

For å vise oppskriftene i nettleseren, lag maler for visningene dine. En mal skal være for oppskriftsliste visning mens den andre skal være for recipe_detail utsikt. For å bruke sneglen i malen din, følg dette formatet, {% url 'view_name' recipe.slug %}. Her er to eksempler du kan bruke i koden din:

 recipes/recipe_list.html 
{% utvider 'base.html' %}

{% blokker innhold %}
<h1klasse="my-5 tekstsenter">Oppskrifterh1>
<senter>
<ulklasse="liste-gruppe w-75">
{% for oppskrift i oppskrifter %}
<liklasse="liste-gruppe-element min-3">
<h2klasse="mb-3">
<enhref="{% url 'recipe_detail' recipe.slug %}">
{{ recipe.name }}
en>
h2>
<sklasse="w-50">
Ingredienser: {{ recipe.ingredients }}
s>
<sklasse="tekst-dempet">
Opprettet: {{ recipe.date_created }}
s>
li>
{% tom %}
<liklasse="liste-gruppe-element">Ingen oppskrifter funnet.li>
{% endfor %}
ul>
senter>
{% sluttblokk %}

HTML-malen ovenfor vil vise alle oppskriftene i databasen din Ingen oppskrifter funnet hvis det ikke finnes oppskrifter. Den bruker Bootstrap-klasser for styling. Du kan lære hvordan bruk Bootstrap med Django. Malen ovenfor skal se slik ut i nettleseren:

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

{% blokker innhold %}
<senter>
<divklasse="w-75">
<h1klasse="mt-5 mb-4">{{ recipe.name }}h1>
<h3>Ingredienserh3>
<s>{{ recipe.ingredients }}s>
<h3>Bruksanvisningh3>
<s>{{ recipe.instructions }}s>
<sklasse="tekst-dempet">Opprettet: {{ recipe.date_created }}s>
div>
senter>
{% sluttblokk %}

HTML-malen ovenfor returnerer detaljer om en spesifikk oppskrift. På nettleseren skal siden ovenfor se slik ut:

Du vil legge merke til at URL-en nå inneholder hva slags slug du har lagt til i databasen for hver oppskrift. Hvis du ikke forstår hvordan malsystemet fungerer, bør du først lære det mal arv i Django og Djangos MVT-arkitektur.

Generer automatisk en snegl i Django

Med snegler er det du virkelig ønsker å generere dem automatisk basert på et felt i modellen din. For å gjøre dette, må du endre lagre() metoden i modellen og spesifiser dine egne regler før objekter lagres i databasen. Her er et enkelt eksempel du kan legge til modellklassen din:

# importer slugify
fra django.template.defaultfilters import trege

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

Funksjonen ovenfor sjekker først om det finnes en slug for modellobjektet. Hvis det ikke er noen snegle, bruker den trege funksjon for å generere en fra navnefeltet i modellen. Etter å ha overstyrt lagre() metoden, åpne administrasjonspanelet og legg til noen oppskrifter. Denne gangen trenger du ikke å fylle ut sneglefeltet fordi det automatisk fylles ut når du lagrer oppskriften.

Hvis du navigerer til detaljsiden for den nylig lagt til oppskriften, vil du se at URL-en bruker oppskriftsnavnet som sneglen.

Noen ganger vil du ha flere oppskrifter med samme navn, og det vil forårsake feil i sneglen din. Du kan fikse dette ved å legge til et unikt element til sneglen din, for eksempel datoen opprettet. Her er et enkelt eksempel:

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

Bruk Slugs for å forbedre URL-opplevelsen

I motsetning til de gode gamle pk, gir snegler mange fordeler, inkludert fleksibilitet og portabilitet siden de ikke er knyttet til spesifikke URL-identifikatorer som primærnøkkelen. Derfor, hvis du endrer databasestrukturen eller migrerer dataene dine, kan du fortsatt opprettholde konsistente URL-er. Snegler forbedrer også SEO-vennlighet.