Padidinkite savo „Django“ programos efektyvumą ir mastelį, įdiegdami puslapių rūšiavimą. Štai viskas, ką reikia žinoti norint pradėti.

Puslapių spausdinimas pagerina vartotojo patirtį ir programos našumą dirbant su dideliais duomenų rinkiniais. Jei nebus įdiegta puslapių rūšiavimo sistema, jūsų programa dažniausiai atsiliks. Naudodami „Django“ galite panaudoti integruotą puslapių numeravimo palaikymą, kad galėtumėte kurti žiniatinklio programos puslapius.

Kaip puslapių spausdinimas veikia Django

Puslapių puslapių žymėjimo įgyvendinimas „Django“ gali skirtis priklausomai nuo to, ar dirbate su klasių ar funkcijų rodiniais. Nepriklausomai nuo pasirinkto metodo, pagrindiniai principai išlieka tie patys.

Django naudoja klasę, vadinamą Puslapių skaitytuvas puslapių spausdinimui įgyvendinti. The Puslapių skaitytuvas klasėje pateikiami keli metodai, kuriuos galite naudoti norėdami tinkinti puslapius. Inicijuojant Puslapių skaitytuvas klasėje, reikia dviejų privalomų parametrų; puslapių puslapių duomenys ir rodomų elementų skaičius puslapyje. The

instagram viewer
Puslapių skaitytuvas įveda trečiąjį neprivalomą našlaičių parametrą, kad nurodytų mažiausią elementų skaičių, kuris turėtų likti paskutiniame puslapyje. Pagal numatytuosius nustatymus našlaičių reikšmė yra 0, tai reiškia, kad visuose puslapiuose yra tiek pat elementų.

„Django“ puslapių puslapių URL yra panašus į šį: https://example.com/products/?page=3. The puslapį URL parametras nurodo Django, kurį puslapį vartotojas nori matyti. Tai taip pat padeda „Django“ nustatyti, kurią to puslapio duomenų dalį rodyti.

Šiame projekte naudojamas kodas yra a GitHub saugykla ir jūs galite nemokamai naudotis pagal MIT licenciją.

Nustatykite „Django“ projektą puslapių spausdinimui

Prieš pradėdami kurti puslapius Django, turite turėti įdiegėte Django ir nustatykite jį savo kompiuteryje. Kompiuteryje nustatę Django, turėtumėte sukurti programėlę ir modelį savo duomenims. Štai paprastas modelis, kurį galite nukopijuoti:

 django.db importuoti modeliai

klasėĮrašas(modeliai. Modelis):

pavadinimas = modeliai. CharField (max_length=255)
autorius = modeliai. CharField (max_length=50)
turinys = modeliai. Teksto laukas(„Paskelbti turinį“)

def__str__(savarankiškai):
grąžinti savęs.pavadinimas

Aukščiau pateiktas modelis skirtas tinklaraščio programai. Jis apibrėžia kiekvieno tinklaraščio įrašo pavadinimo, autoriaus ir turinio laukus. Jame taip pat yra metodas, kuris grąžina įrašo pavadinimą, kad administratoriaus skydelyje būtų geresnė vartotojo patirtis.

Perkelkite savo modelį vykdydami šią komandą:

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

Perkėlę modelį, turėtumėte pereiti prie dienoraštis>admin.py jį užregistruoti. Šis kodas sėkmingai užregistruoja modelį, vadinamą Įrašas.

 django.contrib importuoti admin
.modeliai importuoti Įrašas # pakeiskite „Paskelbti“ savo modelio pavadinimu

admin.site.register (Įrašas)

Tada sukurkite supervartotoją ir pridėkite įrašų savo „Django“ administratoriaus skydelyje. Norėdami sukurti supervartotoją, naudokite šią komandą:

python manage.py createsuperuser

Aukščiau pateikta komanda padės atlikti procesą, pavaizduotą toliau esančiame paveikslėlyje:

Sukūrę supervartotoją, paleiskite kūrimo serverį ir eikite į administratoriaus skydelį.

python manage.py runserver

Kai serveris prasidės, eikite į http://127.0.0.1:8000/admin, prisijunkite ir pridėkite keletą įrašų.

Tada sukurkite HTML šabloną, kad jūsų įrašai būtų rodomi naršyklėje. Sukurkite failą šiame kataloge: your_app/templates/your_app_name/index.html. Jei nesuprantate, kaip kurti šablonus, perskaitykite mūsų įvadinis „Django“ MVT architektūros vadovas.

„Django“ puslapių rodymas funkcijomis pagrįstame rodinyje

„Django“ leidžia kurti programas su klasės rodiniais arba funkcijomis pagrįstais rodiniais. Programos puslapių rūšiavimas naudojant funkcijų rodinį. Atlikite šiuos veiksmus:

  • Atidaryk savo views.py failą ir importuoti Puslapių skaitytuvas klasė.
 django.core.paginator importuoti Puslapių skaitytuvas
  • Sukurkite peržiūros funkciją, kad pateiktumėte įrašus savo HTML šablone.
 django.shortcuts importuoti pateikti
.modeliai importuoti Įrašas
django.core.paginator importuoti Puslapių skaitytuvas

defSarašas(užklausa):
posts = Post.objects.all()
grąžinti pateikti (prašyti, 'blog/blog_list_view.html', {"įrašai":posts})

  • Sukurkite URL šabloną, kad jūsų įrašai būtų rodomi naršyklėje. Pradėkite konfigūruodami URL šabloną savo projekto kataloge. Atidaryk urls.py failą projekto lygiu ir pridėkite jį prie url šablonai:
 django.urls importuoti įtraukti

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

Aukščiau pateiktame kodo fragmente pakeiskite dienoraštį su savo programos pavadinimu. Jei negalite atskirti projekto nuo programos, turėtumėte žinoti kuo projektas skiriasi nuo programos Django.

Atlikę aukščiau nurodytą konfigūraciją, sukurkite a urls.py failą savo programų kataloge (šiuo atveju tai yra dienoraštį aplanką) ir pridėkite šį kodo fragmentą:

 django.urls importuoti kelias
.Peržiūros importuoti Sarašas

urlpatterns = [
kelias ('', list_view, name='Sarašas'),
]

Kai paleisite serverį ir eikite į http://127.0.0.1:8000/, naršyklė rodys jūsų įrašus pagal jūsų nurodytą stiliaus lapą.

  • Pakeiskite peržiūros funkciją, kad pridėtumėte puslapių rūšiavimo logiką. Štai pavyzdys:
defSarašas(užklausa):
posts = Post.objects.all()
puslapiais = Puslapių tvarkyklė (įrašai, 3)
puslapio_numeris = užklausa. GET.get('puslapis') #Gaukite prašomą puslapio numerį iš URL

puslapis = paginated.get_page (puslapio_numeris)
grąžinti pateikti (prašyti, 'blog/blog_list_view.html', {'puslapis':page})

Aukščiau pateiktame kodo fragmente pateikiami trys nauji kintamieji: puslapiais, puslapio numeris, ir puslapį. Kiekvienas kintamasis atlieka šiuos veiksmus:

  1. The puslapiais kintamasis inicijuotas Puslapių skaitytuvas klasė. Pagal šį scenarijų duomenys, kurių puslapiai turi būti rūšiuojami, yra užklausų rinkinys, žinutės, ir reikia 3 kaip viename puslapyje rodomų elementų skaičius.
  2. The puslapio numeris kintamasis gauna puslapio numerį iš URL. Pavyzdžiui, į http://127.0.0.1:8000/?page=2, puslapio numeris yra 2.
  3. The puslapį kintamasis nuskaito konkretų puslapį, kurį reikia pateikti iš puslapiais kintamasis.

Iki šiol „Django“ turėjo sužymėti puslapius jūsų puslapyje. Galite pereiti į konkrečius puslapius su puslapiais naudodami URL formatą, parodytą šiame paveikslėlyje:

  • Pakeiskite HTML šabloną, kad būtų rodoma puslapių naršymo nuoroda. Naudojant metodus, esančius Puslapių skaitytuvas klasė leidžia sukurti paprastą naršymą puslapyje. Štai pavyzdys, kurį galite pridėti po pradiniu HTML kodu:
 {% if page.has_previous %}
<ahref="?page={{page.previous_page_number}}"
class="btn btn-secondary mx-NN">Ankstesnisa>
{% endif %}

<ahref="?page=1"klasė="btn btn-secondary">Pirmasa>

{% num in page.paginator.page_range %}
{% if num == page.number %}
<tarpas>{{ skaičius }}tarpas>
{% Kitas %}
<ahref="?page={{num}}"klasė="btn btn-secondary mx-2">
{{ skaičius }}
a>
{% endif %}
{% endfor %}

<ahref="?page={{page.paginator.num_pages}}"klasė="btn btn-secondary mx-2">
Paskutinis
a>

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

Aukščiau pateiktame kodo fragmente šie metodai naudojami kartu su sąlyginiais teiginiais, siekiant nustatyti, kaip atrodys puslapių naršymas:

  1. turi_ankstesnis: Šis metodas grąžinamas Tiesa jei puslapiuose suskaidytuose duomenyse yra ankstesnis puslapis.
  2. ankstesnio_puslapio_numeris: Šis metodas grąžina ankstesnio puslapio vertę.
  3. page_range: Šis metodas leidžia sužinoti, kiek puslapių yra puslapiuose.
  4. numerį: Šis metodas grąžina dabartinio puslapio vertę.
  5. puslapių_skaičius: Šis metodas grąžina bendrą puslapių skaičių.
  6. turi_kitą: ši funkcija grąžinama Tiesa jei puslapiuose suskaidytuose duomenyse yra kitas puslapis.
  7. kito_puslapio_numeris: Šis metodas grąžina kito puslapio reikšmę.

„Django“ puslapių spausdinimas klasių rodinyje

Klase pagrįstame rodinyje jums nereikia importuoti ir inicijuoti Puslapių skaitytuvas klasė. Norėdami pritaikyti puslapių puslapius klasių rodinyje, turėtumėte nurodyti atributą, vadinamą paginate_by. Atlikite toliau nurodytus veiksmus, kad savo programos puslapiais pakeistumėte klasių rodinį:

  • Parašykite klasių rodinį ir nurodykite paginate_by atributas. Štai paprastas pavyzdys:
 .modeliai importuoti Įrašas
django.views.generic importuoti Sarašas

klasėPostListView(Sarašas):
modelis = paštas
šablono_pavadinimas = 'blog/blog_list_view.html'
konteksto_objekto_pavadinimas = 'puslapis'
paginate_by = 2

Aukščiau pateiktas rodinys yra anksčiau parašyto funkcijomis pagrįsto rodinio klasėmis pagrįsta versija. Šis vaizdas paveldėjo Django Sarašas klasė, naudojama elementams surašyti. Jis apibrėžia savo logiką tokiais atributais kaip modelis, šablono_pavadinimas, konteksto_objekto_pavadinimas, ir paginate_by. The paginate_by atributas nustato, kiek pranešimų rodyti puslapyje; šiuo atveju 2 pranešimai.

  • Sukūrę rodinį pakeiskite savo urls.py failą, kad jį naudotumėte. Štai paprastas pavyzdys:
 .Peržiūros importuoti PostListView

urlpatterns = [
kelias ('', PostListView.as_view(), pavadinimas='Sarašas'),
]

  • Pakeiskite savo HTML šabloną, kad galėtumėte naudoti page_obj puslapiams.
 {% if page_obj.has_previous %}
<ahref="?page={{page_obj.previous_page_number}}"
class="btn btn-secondary mx-NN">Ankstesnisa>
{% endif %}

<ahref="?page=1"klasė="btn btn-secondary">Pirmasa>

{% už skaičių page_obj.paginator.page_range %}
{% if num == page_obj.number %}
<tarpasklasė="Dabartinis puslapis">{{ skaičius }}tarpas>
{% Kitas %}
<ahref="?page={{num}}"klasė="btn btn-secondary mx-2">
{{ skaičius }}
a>
{% endif %}
{% endfor %}

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

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

Skirtingai nuo funkcijomis pagrįsto rodinio HTML šablono, šis šablonas naudoja page_obj vietoj puslapį atvaizduoti puslapio objektą. Tai yra numatytasis „Django“ puslapių rūšiavimo klasėmis elgesys.

Naudokite puslapius, kad jūsų programa būtų keičiama

Puslapių spausdinimas sumažina serverio / duomenų bazės apkrovą, vienu metu gaudamas ir rodydamas mažesnius duomenų pogrupius. Naudojant puslapių puslapius, jūsų svetainių našumas padidės. Jūsų vartotojai taip pat turės gerą patirtį naudodami programą.

Klasėmis pagrįsti rodiniai sutaupo daugiau laiko ir kodo, palyginti su funkcijomis pagrįstais rodiniais, tačiau galite naudoti bet kurį iš jų, atsižvelgdami į savo pageidavimus ir projekto specifikacijas.