Suurendage oma Django rakenduse tõhusust ja mastaapsust, rakendades lehekülgede jagamist. Siin on kõik, mida peate alustamiseks teadma.

Lehtede lehitsemine parandab kasutajakogemust ja rakenduste jõudlust suurte andmekogumite käsitlemisel. Ilma lehekülgede otsimise süsteemita esineb teie rakendusel enamiku ajast mahajäämus. Django abil saate oma veebirakenduse lehekülgede muutmiseks kasutada sisseehitatud lehekülgede muutmise tuge.

Lehekülgede kasutamine Djangos

Lehtede muutmise rakendamine Djangos võib erineda olenevalt sellest, kas töötate klassi- või funktsioonipõhiste vaadetega. Olenemata teie eelistatud meetodist jäävad aluspõhimõtted samaks.

Django kasutab klassi nimega Leheküljehoidja lehekülgede muutmiseks. The Leheküljehoidja klass pakub mitmeid meetodeid, mida saate oma lehekülgede kohandamiseks kasutada. Initsialiseerimisel Leheküljehoidja klass, see võtab kaks kohustuslikku parameetrit; lehitsetavad andmed ja ühel lehel kuvatavate üksuste arv. The Leheküljehoidja võtab orbude jaoks kasutusele kolmanda valikulise parameetri, et määrata üksuste minimaalne arv, mis peaksid jääma viimasele lehele. Vaikimisi on orbude väärtus 0, mis tähendab, et kõigil lehtedel on sama arv üksusi.

instagram viewer

Django lehekülgede URL on sarnane järgmisele: https://example.com/products/?page=3. The lehel URL-i parameeter ütleb Djangole, millist lehte kasutaja soovib näha. Samuti aitab see Djangol määrata, millist osa andmetest selle lehe jaoks kuvada.

Selles projektis kasutatav kood on saadaval a GitHubi hoidla ja seda saate MIT-i litsentsi alusel tasuta kasutada.

Seadistage oma Django projekt lehekülgede jaoks

Enne Django lehekülgede avamist peab teil olema installinud Django ja seadistanud selle oma arvutisse. Pärast Django arvutis seadistamist peaksite oma andmete jaoks looma rakenduse ja mudeli. Siin on lihtne mudel, mida saate kopeerida:

alates django.db importida mudelid

klassPostita(mudelid. mudel):

pealkiri = mudelid. CharField (max_length=255)
autor = modellid. CharField (max_length=50)
sisu = mudelid. Tekstiväli("Postita sisu")

def__str__(ise):
tagasi ise.pealkiri

Ülaltoodud mudel on ajaveebirakenduse jaoks. See määrab iga ajaveebi postituse pealkirja, autori ja sisu väljad. Sellel on ka meetod, mis tagastab postituse pealkirja, et administraatori paneelil oleks parem kasutuskogemus.

Migreerige oma mudel, käivitades selle käsu:

python manage.py makemigrations && python manage.py migre

Pärast mudeli üleviimist peaksite navigeerima saidile ajaveeb> admin.py selle registreerimiseks. Järgmine kood registreerib edukalt mudeli nimega Postita.

alates django.contrib importida admin
alates .mudelid importida Postita # asenda 'Postitus' oma mudeli nimega

admin.site.register (postitus)

Järgmisena looge superkasutaja ja lisage oma Django administraatoripaneelile postitusi. Superkasutaja loomiseks kasutage seda käsku:

python manage.py loob superkasutaja

Ülaltoodud käsk viib teid läbi alloleval pildil näidatud protsessi:

Pärast superkasutaja loomist käivitage oma arendusserver ja navigeerige administraatoripaneelile.

python manage.py runserver

Kui teie server käivitub, navigeerige saidile http://127.0.0.1:8000/admin, logige sisse ja lisage paar postitust.

Järgmisena looge oma postituste brauseris renderdamiseks HTML-mall. Looge oma fail järgmises kataloogis: your_app/templates/your_app_name/index.html. Kui te ei mõista, kuidas malle luua, lugege meie Django MVT arhitektuuri sissejuhatav juhend.

Django lehekülgede jagamine funktsioonipõhises vaates

Django võimaldab teil luua rakendusi kas klassipõhiste või funktsioonipõhiste vaadetega. Rakenduse lehekülgede muutmiseks funktsioonipõhise vaate abil. Järgige neid samme.

  • Ava oma views.py faili ja importige Leheküljehoidja klass.
alates django.core.paginator importida Leheküljehoidja
  • Looge kuvamisfunktsioon postituste renderdamiseks oma HTML-mallis.
alates django.otseteed importida renderdama
alates .mudelid importida Postita
alates django.core.paginator importida Leheküljehoidja

defLoendivaade(taotlus):
postitused = Post.objects.all()
tagasi renderdama (päring, „blog/blog_list_view.html”, {'postitused':posts})

  • Looge URL-i muster, et kuvada oma postitused brauseris. Alustuseks seadistage URL-i muster oma projekti kataloogis. Ava urls.py faili projekti tasemel ja lisage see failile URL-i mustrid:
alates django.urls importida sisaldama

urlmustrid = [
...,
tee ('', sisaldab('blog.urls')),
]

Asendage ülaltoodud koodilõik ajaveebi teie rakenduse nimega. Kui te ei suuda projektil ja rakendusel vahet teha, peaksite teadma kuidas projekt erineb Django rakendusest.

Pärast ülaltoodud seadistuste tegemist looge a urls.py faili oma rakenduse kataloogis (antud juhul on see ajaveebi kaust) ja lisage see koodilõik:

alates django.urls importida tee
alates .vaateid importida Loendivaade

urlmustrid = [
tee ('', loendi_vaade, nimi='Loendivaade'),
]

Kui käivitate oma serveri ja navigeerite saidile http://127.0.0.1:8000/, kuvab brauser teie postitused teie määratud stiililehe järgi.

  • Lehekülje loogika lisamiseks muutke oma vaatefunktsiooni. Siin on näide:
defLoendivaade(taotlus):
postitused = Post.objects.all()
leheküljed = Lehekülg (postitused, 3)
lehe_number = taotlus. GET.get('leht') #Hankige URL-ist soovitud lehenumber

leht = paginated.get_page (page_number)
tagasi renderdama (päring, „blog/blog_list_view.html”, {'leht':page})

Ülaltoodud koodilõik tutvustab kolme uut muutujat: pagineeritud, lehekülje numberja lehel. Iga muutuja teeb järgmist:

  1. The pagineeritud muutuja initsialiseeriti Leheküljehoidja klass. Selle stsenaariumi korral on lehekülgede lehekülgede esitamiseks päringukomplekt, postitused, ja see võtab 3 lehel kuvatavate üksuste arvuna.
  2. The lehekülje number muutuja saab lehekülje numbri URL-ist. Näiteks sisse http://127.0.0.1:8000/?page=2, lehekülje number on 2.
  3. The lehel muutuja hangib konkreetse lehe, mida renderdada pagineeritud muutuv.

Nüüdseks on Django kindlasti teie lehe lehekülgede muutnud. Saate navigeerida kindlatele lehekülgedele, kasutades sellel pildil näidatud URL-i vormingut:

  • Muutke oma HTML-malli, et kuvada lehekülgede navigeerimine. Kasutades saadaolevaid meetodeid Leheküljehoidja klass võimaldab teil luua oma lehel lihtsat navigeerimist. Siin on näide, mille saate lisada oma esialgse HTML-koodi alla:
 {% if page.has_previous %}
<ahref="?page={{page.previous_page_number}}"
class="btn btn-secondary mx-NN">Eelminea>
{% endif %}

<ahref="?page=1"klass="btn btn-sekundaarne">Esiteksa>

{% num in page.paginator.page_range %}
{% if num == page.number %}
<ulatus>{{ number }}ulatus>
{% muu %}
<ahref="?page={{num}}"klass="btn btn-secondary mx-2">
{{ number }}
a>
{% endif %}
{% endfor %}

<ahref="?page={{page.paginator.num_pages}}"klass="btn btn-secondary mx-2">
Viimane
a>

{% if page.has_next %}
<ahref="?page={{page.next_page_number}}"klass="btn btn-secondary mx-2">
Edasi
a>
{% endif %}

Ülaltoodud koodilõigu puhul kasutatakse järgmisi meetodeid koos tingimuslausetega, et määrata, kuidas lehekülgedel navigeerimine välja näeb.

  1. on_eelmine: see meetod tagastab Tõsi kui pagineeritud andmetes on eelmine leht.
  2. eelmine_lehe_number: see meetod tagastab eelmise lehe väärtuse.
  3. lehe_vahemik: see meetod annab teile teada, mitu lehekülge teie lehekülgedel on.
  4. number: see meetod tagastab praeguse lehe väärtuse.
  5. lehekülgede_arv: see meetod tagastab lehekülgede koguarvu.
  6. on_järgmine: see funktsioon tagastab Tõsi kui pagineeritud andmetes on järgmine lehekülg.
  7. järgmise_lehe_number: see meetod tagastab järgmise lehe väärtuse.

Django lehekülgede trükkimine klassipõhises vaates

Klassipõhises vaates ei pea te importima ega lähtestama Leheküljehoidja klass. Lehekülje rakendamiseks klassipõhises vaates peaksite määrama atribuudi nimega paginate_by. Rakenduse klassipõhise vaatega lehekülgede lisamiseks järgige neid samme.

  • Kirjutage klassipõhine vaade ja määrake paginate_by atribuut. Siin on lihtne näide:
alates .mudelid importida Postita
alates django.views.generic importida Loendivaade

klassPostListView(Loendivaade):
mudel = Postitus
malli_nimi = „blog/blog_list_view.html”
konteksti_objekti_nimi = 'leht'
lehekülge_by = 2

Ülaltoodud vaade on varem kirjutatud funktsioonipõhise vaate klassipõhine versioon. See vaade pärib Django oma Loendivaade klass, mida kasutatakse üksuste loetlemiseks. See määratleb oma loogika selliste atribuutidega nagu mudel, malli_nimi, konteksti_objekti_nimija paginate_by. The paginate_by atribuut määrab, mitu postitust lehel kuvada; antud juhul 2 postitust.

  • Kui olete vaate loonud, muutke oma urls.py faili selle kasutamiseks. Siin on lihtne näide:
alates .vaateid importida PostListView

urlmustrid = [
tee ('', PostListView.as_view(), nimi='Loendivaade'),
]

  • Muutke oma HTML-i malli kasutamiseks page_obj lehekülgede jaoks.
 {% if page_obj.has_previous %}
<ahref="?page={{page_obj.previous_page_number}}"
class="btn btn-secondary mx-NN">Eelminea>
{% endif %}

<ahref="?page=1"klass="btn btn-sekundaarne">Esiteksa>

{% num in page_obj.paginator.page_range %}
{% if num == page_obj.number %}
<ulatusklass="Käesolev lehekülg">{{ number }}ulatus>
{% muu %}
<ahref="?page={{num}}"klass="btn btn-secondary mx-2">
{{ number }}
a>
{% endif %}
{% endfor %}

<ahref="?page={{page_obj.paginator.num_pages}}"
class="btn btn-secondary mx-NN">
Viimane
a>

{% if page.has_next %}
<ahref="?page={{page_obj.next_page_number}}"
class="btn btn-secondary mx-NN">
Edasi
a>
{% endif %}

Erinevalt funktsioonipõhise vaate HTML-mallist kasutab see mall page_obj selle asemel lehel leheobjekti esindamiseks. See on Django klassipõhise lehekülgede muutmise vaikekäitumine.

Rakenduse skaleeritavaks muutmiseks kasutage lehekülgede kasutamist

Lehtede lehitsemine vähendab teie serveri/andmebaasi koormust, hankides ja kuvades korraga väiksemaid andmete alamhulka. Lehtede vahetamisega suureneb teie veebisaitide jõudlus. Teie kasutajad saavad ka teie rakenduse kasutamisel hea kogemuse.

Klassipõhised vaated säästavad funktsioonipõhiste vaadetega võrreldes rohkem aega ja koodi, kuid olenevalt eelistustest ja projekti spetsifikatsioonidest saate kasutada mõlemat.