Ne morate se mučiti da biste stvorili puževe u Djangu. Implementirajte automatsko generiranje puževa kako biste uštedjeli vrijeme i pojednostavili svoj tijek rada.

Kao web programeru, optimizacija korisničkog iskustva vaše web aplikacije ključna je. Kako biste poboljšali korisničko iskustvo i vidljivost u tražilici, koristite URL-ove prilagođene korisniku sa slagovima u Djangu. Stvaranje URL-ova pomoću puževa jednostavno je poput pisanja funkcije, što vam omogućuje generiranje sažetih i opisnih URL-ova koje korisnici i tražilice lako razumiju. Ovo poboljšava upotrebljivost i pristupačnost, a istodobno podiže rangiranje u tražilicama.

Primjeri koda korišteni u ovom članku mogu se pronaći ovdje GitHub spremište.

Stvaranje Django projekta

Django nudi nekoliko metoda za generiranje puževa i njihovo korištenje na vašoj web stranici. Kako bismo ilustrirali različite načine implementacije puževa, ovaj vodič će vas provesti kroz izradu jednostavne web aplikacije za blog.

Prije postavljanja Django projekta,

instagram viewer
stvoriti i aktivirati virtualno okruženje za instaliranje potrebnih ovisnosti. Nakon što aktivirate svoje virtualno okruženje, slijedite ove korake za postavljanje projekta:

  • Instalirajte Django pomoću naredbe pip u naredbenom retku:
pip instaliraj django
  • Izradite projekt pomoću django-admin korisnost. Ovaj vodič će koristiti jezgra_projekta kao naziv projekta.
django-admin startproject project_core .
  • Izradite aplikaciju pod nazivom Recepti.
python manage.py startapp recepti
  • Dodajte svoju aplikaciju među instalirane aplikacije u vašem projektu postavka.py datoteka.
INSTALLED_APPS = [
'...'
'Recepti',
]
  • Pokrenite svoju aplikaciju upisivanjem sljedeće naredbe u alat naredbenog retka:
python manage.py runserver
  • Idite do http://127.0.0.1:8000/ u vašem pregledniku. Trebali biste vidjeti ovu stranicu:
  • Konfigurirajte uzorak URL-a u svom projektu urls.py datoteka
iz django.urls uvoz put, uključiti

url uzorci = [
'...',
staza('', uključi('recepti.urls'))
]

Stvaranje puža u Djangu

Za generiranje puža u Djangu morate uključiti polje puža u svoje modele. Slijedite ove korake za stvaranje puža u Djangu.

Stvorite model

U vašem modeli.py datoteku, stvorite novi model i uključite polje puža. Evo primjera:

razredaRecept(modeli. Model):
ime = modeli. CharField (max_length=225, prazno=lažno, null=lažno)
sastojci = modeli. TextField (prazno=lažno, null=lažno)
upute = modeli. TextField (prazno=lažno, null=lažno)
datum_izrađen = modeli. DateTimeField (auto_now=Pravi)
slug = modeli. SlugField (null = Pravi, prazno=Pravi, jedinstveno=Pravi)

U gornjem primjeru, model Recept sadrži polje pod nazivom puž. The puž polje ima atribute, ništavan i prazan postavljen Pravi.

Primijenite migracije na svoj model

Nakon što izradite model, trebali biste pokrenuti sljedeću naredbu u svom alatu naredbenog retka da biste kreirali tablicu u svojoj bazi podataka:

python manage.py makemigrations && python manage.py migrirati

Gornja naredba prvo će generirati datoteku za migraciju, a zatim ažurirati bazu podataka izvršavanjem uputa unutar datoteke za migraciju.

Dodajte podatke u svoju bazu podataka

Registrirajte svoj model upisivanjem sljedećeg u svoj admin.py datoteka:

iz django.doprinos uvoz admin
iz .modeli uvoz Recept

admin.site.register (Recept)

Zatim otvorite alat naredbenog retka i stvorite superkorisnik za vašu administrativnu ploču pokretanjem ove naredbe:

python management.py createsuperuser

Gornja naredba provest će vas kroz korake prikazane na ovoj slici:

Nakon stvaranja a superkorisnik, pokrenite svoj lokalni poslužitelj sljedećom naredbom:

python manage.py runserver

Nakon što se vaš poslužitelj pokrene, trebali biste ići na http://127.0.0.1:8000/admin/, prijavite se s podacima koje ste upotrijebili za izradu superkorisnik, i ručno dodajte neke recepte u svoju bazu podataka. Trebali biste obratiti pozornost na polje puža.

Stvorite prikaze za svoju aplikaciju

Otvori svoju pogledi.py datoteku i izradite dva prikaza za svoju aplikaciju. Prvi prikaz će jednostavno prikazati pregled vaših recepata, dok će drugi dati više detalja o svakom receptu. Ove prikaze možete koristiti u svom projektu:

iz django.prečaci uvoz render, get_object_or_404
iz .modeli uvoz Recept

# Prikaz popisa za recepte
defpopis_recepata(zahtjev):
recepti = Recipe.objects.all()
povratak prikazati (zahtjev, 'recepti/popis_recepata.html', {"Recepti":Recepti})

# Prikaz detalja za svaki recept
defdetalj_recepta(zahtjev, recipe_slug):
recept = get_object_or_404(Recept, slug=recipe_slug)
povratak prikazati (zahtjev, 'recepti/detalji_recepta.html', {'recept': recept})

U gornjem isječku koda, popis_recepata pogled vraća popis svih recepata u predložak. S druge strane, detalj_recepta pogled vraća jedan recept u predložak. Ovaj prikaz uzima dodatni parametar tzv recept_puž koji se koristi za dobivanje puža za određeni recept.

Konfigurirajte URL uzorke za svoje poglede

U direktoriju vaših aplikacija (ili recept folder), stvorite datoteku pod nazivom urls.py za dodavanje URL staza za vašu aplikaciju. Evo primjera:

iz django.urls uvoz staza
iz .pogleda uvoz popis_recepata, detalj_recepta

url uzorci = [
staza('', popis_recepata, naziv='recept-kuća'),
staza('recept//', detalj_recepta, ime='recept_detail'),
]

U gornjem isječku koda, drugi put uvodi slug u URL stranice.

Izradite predloške za svoju aplikaciju

Za prikaz recepata u pregledniku izradite predloške za svoje prikaze. Jedan predložak trebao bi biti za popis_recepata pogled dok bi drugi trebao biti za detalj_recepta pogled. Da biste koristili slug u svom predlošku, slijedite ovaj format, {% url 'view_name' recipe.slug %}. Evo dva primjera koja možete koristiti u svom kodu:

 recepti/popis_recepata.html 
{% proširuje 'base.html' %}

{% blokiraj sadržaj %}
<h1razreda="moj-5 centar za tekst">Receptih1>
<centar>
<ulrazreda="popis-grupa w-75">
{% za recept u receptima %}
<lirazreda="list-group-item my-3">
<h2razreda="mb-3">
<ahref="{% url 'recipe_detail' recipe.slug %}">
{{ recipe.name }}
a>
h2>
<strrazreda="w-50">
Sastojci: {{ recipe.ingredients }}
str>
<strrazreda="tekst isključen">
Napravljeno: {{ recipe.date_created }}
str>
li>
{% prazno %}
<lirazreda="stavka-grupe-popisa">Nema pronađenih recepata.li>
{% endfor %}
ul>
centar>
{% endblock %}

Gornji HTML predložak izlistat će sve recepte u vašoj bazi podataka i prikazati Nema pronađenih recepata ako nema recepata. Za stiliziranje koristi Bootstrap klase. Možete naučiti kako koristite Bootstrap s Djangom. Gornji predložak trebao bi izgledati ovako u pregledniku:

 recepti/detalji_recepta.html 
{% proširuje 'base.html' %}

{% blokiraj sadržaj %}
<centar>
<divrazreda="w-75">
<h1razreda="mt-5 mb-4">{{ recipe.name }}h1>
<h3>Sastojcih3>
<str>{{ recept.sastojci }}str>
<h3>uputeh3>
<str>{{ recept.upute }}str>
<strrazreda="tekst isključen">Napravljeno: {{ recipe.date_created }}str>
div>
centar>
{% endblock %}

Gornji HTML predložak vraća detalje o određenom receptu. U pregledniku bi gornja stranica trebala izgledati ovako:

Primijetit ćete da URL sada sadrži bilo koji slug koji ste dodali u svoju bazu podataka za svaki recept. Ako ne razumijete kako funkcionira sustav predložaka, prvo biste trebali naučiti nasljeđivanje predloška u Djangu i Djangova MVT arhitektura.

Automatski generiraj puž u Djangu

Što se tiče puževa, ono što stvarno želite je da ih automatski generirate na temelju polja u vašem modelu. Da biste to učinili, morate modificirati uštedjeti() metodu u vašem modelu i odredite vlastita pravila prije nego što se objekti spremaju u bazu podataka. Evo jednostavnog primjera koji možete dodati svojoj klasi modela:

# import slugify
iz django.template.defaultfilters uvoz usporiti

defuštedjeti(self, *args, **kwargs):
akone self.slug:
self.slug = slugify (self.name)
super().save(*args, **kwargs)

Gornja funkcija prvo provjerava postoji li slug za objekt modela. Ako nema puža, koristi se usporiti funkciju za generiranje jednog iz polja imena u modelu. Nakon nadjačavanja uštedjeti() način, otvorite svoju administrativnu ploču i dodajte neke recepte. Ovaj put ne morate popuniti polje puža jer će se automatski popuniti nakon što spremite svoj recept.

Ako prijeđete na stranicu s detaljima svog novododanog recepta, vidjet ćete da URL koristi naziv recepta kao oznaku.

Ponekad ćete imati više recepata s istim imenom i to će uzrokovati pogreške u vašem pužu. To možete popraviti dodavanjem jedinstvenog elementa vašem pužu kao što je datum kreiranja. Evo jednostavnog primjera:

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

Koristite puževe za poboljšanje doživljaja URL-a

Za razliku od dobrih starih pak, puževi pružaju mnoge prednosti uključujući fleksibilnost i prenosivost budući da nisu vezani za specifične URL identifikatore kao što je primarni ključ. Stoga, ako promijenite strukturu baze podataka ili migrirate svoje podatke, i dalje možete održavati dosljedne URL-ove. Puževi također poboljšavaju prilagođenost SEO-u.