Jums nereikia vargti kuriant šliužus Django. Įdiekite automatinį šliužų generavimą, kad sutaupytumėte laiko ir supaprastintumėte darbo eigą.

Kadangi esate žiniatinklio kūrėjas, labai svarbu optimizuoti žiniatinklio programos naudotojo patirtį. Kad pagerintumėte naudotojo patirtį ir paieškos variklio matomumą, naudokite patogius URL adresus su „Django“ slinkiais. Kurti URL naudojant šliužus taip pat paprasta, kaip parašyti funkciją, leidžiančią generuoti glaustus ir aprašomus URL, kuriuos būtų lengva suprasti naudotojams ir paieškos sistemoms. Tai padidina naudojimo patogumą ir prieinamumą, tuo pačiu padidindama paieškos sistemų reitingą.

Šiame straipsnyje naudojamus kodo pavyzdžius rasite čia GitHub saugykla.

Django projekto kūrimas

„Django“ siūlo keletą būdų, kaip generuoti šliužus ir naudoti juos jūsų svetainėje. Norėdami iliustruoti įvairius šliužų diegimo būdus, ši pamoka padės jums sukurti paprastą tinklaraščio žiniatinklio programą.

Prieš pradėdami kurti Django projektą, sukurti ir aktyvuoti virtualią aplinką

instagram viewer
įdiegti reikiamas priklausomybes. Suaktyvinę virtualią aplinką, atlikite šiuos veiksmus, kad nustatytumėte projektą:

  • Įdiekite „Django“ naudodami komandą pip komandų eilutėje:
pip įdiegti django
  • Sukurkite projektą naudodami django-admin naudingumas. Ši pamoka bus naudojama project_core kaip projekto pavadinimas.
django-admin startproject project_core .
  • Sukurkite programą pavadinimu receptai.
python manage.py startapp receptai
  • Pridėkite programą prie įdiegtų projektų programų setting.py failą.
INSTALLED_APPS = [
'...'
"receptai",
]
  • Paleiskite programą į komandų eilutės įrankį įvesdami šią komandą:
python manage.py runserver
  • Eikite į http://127.0.0.1:8000/ savo naršyklėje. Turėtumėte pamatyti šį puslapį:
  • Konfigūruokite URL šabloną savo projekte urls.py failą
 django.urls importuoti kelias, įtraukti

urlpatterns = [
'...',
kelias ('', įtraukti ("receptai.urls"))
]

Šliužo kūrimas Django

Norėdami sukurti „Django“ šliužą, į savo modelius turite įtraukti šliužo lauką. Atlikite šiuos veiksmus, kad sukurtumėte šliužą Django.

Sukurkite modelį

Jūsų modeliai.py failą, sukurkite naują modelį ir įtraukite šliužo lauką. Štai pavyzdys:

klasėReceptas(modeliai. Modelis):
pavadinimas = modeliai. CharField (max_length=225, tuščia =Netiesa, null=Netiesa)
ingredientai = modeliai. Teksto laukas (tuščias =Netiesa, null=Netiesa)
instrukcijos = modeliai. Teksto laukas (tuščias =Netiesa, null=Netiesa)
data_created = modeliai. DateTimeField (auto_now=Tiesa)
šliužas = modeliai. SlugField (null = Tiesa, tuščia =Tiesa, unikalus=Tiesa)

Aukščiau pateiktame pavyzdyje modelis Receptas yra laukas pavadinimu šliužas. The šliužas laukas turi atributus, nulinis ir tuščias nustatytas į Tiesa.

Taikykite perkėlimą savo modeliui

Sukūrę modelį, savo komandų eilutės įrankyje turėtumėte paleisti šią komandą, kad sukurtumėte lentelę savo duomenų bazėje:

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

Aukščiau pateikta komanda pirmiausia sugeneruos perkėlimo failą, o tada atnaujins duomenų bazę vykdydama instrukcijas perkėlimo faile.

Pridėkite duomenis į savo duomenų bazę

Užregistruokite savo modelį įvesdami toliau pateiktą informaciją admin.py failas:

 django.contrib importuoti admin
.modeliai importuoti Receptas

admin.site.register (receptas)

Tada atidarykite komandinės eilutės įrankį ir sukurkite a supervartotojas savo administratoriaus skydelyje vykdydami šią komandą:

python manage.py createsuperuser

Aukščiau pateikta komanda padės atlikti šiame paveikslėlyje pavaizduotus veiksmus:

Sukūrus a supervartotojas, paleiskite vietinį serverį naudodami šią komandą:

python manage.py runserver

Kai serveris paleidžiamas, turėtumėte pereiti prie http://127.0.0.1:8000/admin/, prisijunkite naudodami duomenis, kuriuos naudojote kurdami a supervartotojasir rankiniu būdu pridėkite kai kuriuos receptus į savo duomenų bazę. Turėtumėte atkreipti dėmesį į šliužų lauką.

Kurkite savo programos rodinius

Atidaryk savo views.py failą ir sukurkite du programos rodinius. Pirmajame rodinyje tiesiog bus rodoma jūsų receptų apžvalga, o antrajame – daugiau informacijos apie kiekvieną receptą. Savo projekte galite naudoti šiuos rodinius:

 django.shortcuts importuoti render, get_object_or_404
.modeliai importuoti Receptas

# Receptų sąrašo vaizdas
defreceptų_sąrašas(užklausa):
receptai = Receptas.objects.all()
grąžinti pateikti (prašyti, "receptai/receptų_sąrašas.html", {"receptai":receptai})

# Išsamus kiekvieno recepto vaizdas
defrecepto_detaliai(užklausa, receptas_šliužas):
receptas = get_object_or_404 (receptas, šliužas = recepto_slug)
grąžinti pateikti (prašyti, 'receptai/recepto_detail.html', {'receptas': receptas})

Aukščiau pateiktame kodo fragmente receptų_sąrašas rodinys grąžina visų receptų sąrašą į šabloną. Kita vertus, recepto_detaliai rodinys grąžina vieną receptą į šabloną. Šiame rodinyje naudojamas papildomas parametras, vadinamas receptas_šliužas kuris naudojamas norint gauti šliužą pagal konkretų receptą.

Konfigūruokite savo rodinių URL šablonus

Programų kataloge (arba receptas aplanką), sukurkite failą pavadinimu urls.py kad pridėtumėte programos URL kelius. Štai pavyzdys:

 django.urls importuoti kelias
.Peržiūros importuoti receptų_sąrašas, recepto_detalė

urlpatterns = [
kelias ('', receptų_sąrašas, pavadinimas="receptas-namai"),
kelias ('receptas//', recepto_detalė, pavadinimas="recepto_detalė"),
]

Aukščiau pateiktame kodo fragmente antrasis kelias įveda šliuzą į puslapio URL.

Sukurkite savo programos šablonus

Jei norite, kad receptai būtų rodomi naršyklėje, sukurkite savo rodinių šablonus. Vienas šablonas turėtų būti skirtas receptų_sąrašas peržiūrėti, o kitas turėtų būti skirtas recepto_detaliai peržiūrėti. Jei norite naudoti šliužą savo šablone, vadovaukitės šiuo formatu, {% url 'view_name' receptas.slug %}. Štai du pavyzdžiai, kuriuos galite naudoti savo kode:

 receptai/receptų_sąrašas.html 
{% extends 'base.html' %}

{% blokuoti turinį %}
<h1klasė=„mano-5 teksto centras“>Receptaih1>
<centras>
<ulklasė="list-group w-75">
{% receptų receptuose %}
<liklasė="sąrašo grupės elementas mano-3">
<h2klasė="mb-3">
<ahref="{% url 'recipe_detail' receptas.slug %}">
{{ recepto pavadinimas }}
a>
h2>
<pklasė="w-50">
Ingredientai: {{ receptas.ingredientai }}
p>
<pklasė=„tekstas nutildytas“>
Sukurta: {{ receptas.date_sukurta }}
p>
li>
{% tuščia %}
<liklasė="sąrašo grupės elementas">Receptų nerasta.li>
{% endfor %}
ul>
centras>
{% endblock %}

Aukščiau pateiktame HTML šablone bus pateikti visi receptai jūsų duomenų bazėje ir rodomi Receptų nerasta jei nėra receptų. Stiliui kurti naudojamos „Bootstrap“ klasės. Galite išmokti, kaip naudokite Bootstrap su Django. Aukščiau pateiktas šablonas naršyklėje turėtų atrodyti taip:

 receptai/recepto_detail.html 
{% extends 'base.html' %}

{% blokuoti turinį %}
<centras>
<divklasė="w-75">
<h1klasė="mt-5 mb-4">{{ recepto pavadinimas }}h1>
<h3>Ingridientaih3>
<p>{{ receptas.ingredientai }}p>
<h3>Instrukcijosh3>
<p>{{ receptas.instrukcijos }}p>
<pklasė=„tekstas nutildytas“>Sukurta: {{ receptas.date_sukurta }}p>
div>
centras>
{% endblock %}

Aukščiau pateiktas HTML šablonas pateikia išsamią informaciją apie konkretų receptą. Naršyklėje aukščiau pateiktas puslapis turėtų atrodyti taip:

Pastebėsite, kad URL dabar yra bet koks šliužas, kurį įtraukėte į kiekvieno recepto duomenų bazę. Jei nesuprantate, kaip veikia šablonų sistema, pirmiausia turėtumėte išmokti šablono paveldėjimas Django ir Django MVT architektūra.

Automatiškai sugeneruokite šliužą Django

Naudodami šliužus, jūs tikrai norite juos automatiškai generuoti pagal jūsų modelio lauką. Norėdami tai padaryti, turite pakeisti sutaupyti() metodą savo modelyje ir nurodykite savo taisykles prieš išsaugant objektus duomenų bazėje. Štai paprastas pavyzdys, kurį galite įtraukti į savo modelių klasę:

# importuoti slugify
django.template.defaultfilters importuoti sloguoti

defsutaupyti(savęs, *args, **kwargs):
jeigune self.slug:
self.slug = slugify (self.name)
super().save(*args, **kwargs)

Aukščiau pateikta funkcija pirmiausia patikrina, ar modelio objektui yra šliužas. Jei šliužo nėra, jis naudoja sloguoti funkcija generuoti jį iš modelio pavadinimo lauko. Po to, kai nepaisoma sutaupyti() metodą, atidarykite savo administratoriaus skydelį ir pridėkite keletą receptų. Šį kartą jums nereikia pildyti šliužo lauko, nes jis bus automatiškai užpildytas, kai išsaugosite receptą.

Jei pereisite į naujai pridėto recepto išsamios informacijos puslapį, pamatysite, kad URL kaip šliužas naudojamas recepto pavadinimas.

Kartais turėsite kelis receptus tuo pačiu pavadinimu ir tai sukels klaidų jūsų šliužoje. Tai galite išspręsti pridėdami unikalų elementą, pvz., sukūrimo datą. Štai paprastas pavyzdys:

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

Naudokite šliužus, kad pagerintumėte URL patirtį

Skirtingai nuo senų gerų pk, šliužai suteikia daug privalumų, įskaitant lankstumą ir perkeliamumą, nes jie nėra susieti su konkrečiais URL identifikatoriais, pvz., pirminiu raktu. Todėl, jei pakeisite duomenų bazės struktūrą arba perkelsite duomenis, vis tiek galėsite išlaikyti nuoseklius URL. Šliužai taip pat pagerina SEO draugiškumą.