Побољшајте ефикасност и скалабилност ваше Дјанго апликације применом пагинације. Ево свега што треба да знате да бисте започели.

Пагинација побољшава корисничко искуство и перформансе апликације када се ради са великим скуповима података. Без система пагинације, ваша апликација ће већину времена заостајати. Уз Дјанго, можете искористити уграђену подршку за пагинацију за пагинацију ваше веб апликације.

Како пагинација функционише у Дјангу

Имплементација пагинације у Дјангу може се разликовати у зависности од тога да ли радите са погледима заснованим на класама или функцијама. Без обзира на жељени метод, основни принципи остају исти.

Дјанго користи класу тзв Пагинатор за имплементацију пагинације. Тхе Пагинатор цласс пружа неколико метода које можете користити да прилагодите своју пагинацију. Приликом иницијализације Пагинатор класе, потребно је два обавезна параметра; податке за пагинацију и број ставки за приказ по страници. Тхе Пагинатор узима трећи опциони параметар за сирочад да наведе минимални број ставки које треба да остану на последњој страници. Подразумевано, вредност сирочади је 0, што значи да све странице имају исти број ставки.

instagram viewer

УРЛ за Дјанго страницу са пагинацијом је сличан овоме: https://example.com/products/?page=3. Тхе страна параметар у УРЛ-у говори Дјангу коју страницу корисник жели да види. Такође помаже Дјангу да одреди који део података ће приказати за ту страницу.

Код који се користи у овом пројекту доступан је у а ГитХуб спремиште и бесплатан је за коришћење под МИТ лиценцом.

Подесите свој Дјанго пројекат за пагинацију

Пре него што пагинирате у Дјангу, морате да имате инсталирали Дјанго и подесили га на свом рачунару. Након подешавања Дјанга на рачунару, требало би да креирате апликацију и модел за своје податке. Ево једноставног модела који можете копирати:

из дјанго.дб увоз модели

класапошта(модели. модел):

наслов = модели. ЦхарФиелд (макс_ленгтх=255)
аутор = модели. ЦхарФиелд (макс_ленгтх=50)
садржај = модели. Текстуално поље('Садржај поста')

деф__стр__(сам):
повратак селф.титле

Модел изнад је за апликацију за блог. Дефинише наслов, аутора и поља садржаја за сваки пост на блогу. Такође има метод који враћа наслов поста ради бољег корисничког искуства у административној табли.

Мигрирајте свој модел тако што ћете покренути ову команду:

питхон манаге.пи макемигратионс && питхон манаге.пи мигрира

Након миграције модела, требало би да се крећете до блог>админ.пи да га региструју. Следећи код успешно региструје модел тзв пошта.

из дјанго.цонтриб увоз админ
из .модели увоз пошта # замените 'Пост' именом вашег модела

админ.сите.регистер (пост)

Затим креирајте суперкорисника и додајте постове у свој Дјанго админ панел. Да бисте креирали суперкорисника, користите ову команду:

питхон манаге.пи цреатесуперусер

Горња команда ће вас провести кроз процес илустрован на слици испод:

Након што креирате суперкорисника, покрените свој развојни сервер и идите до административног панела.

питхон манаге.пи рунсервер

Када се ваш сервер покрене, идите на http://127.0.0.1:8000/admin, пријавите се и додајте неколико постова.

Затим направите ХТМЛ шаблон за приказивање ваших постова у претраживачу. Креирајте своју датотеку у следећем директоријуму: иоур_апп/темплатес/иоур_апп_наме/индек.хтмл. Ако не разумете како да креирате шаблоне, прочитајте наше уводни водич у Дјангову МВТ архитектуру.

Дјанго пагинација у приказу заснованом на функцијама

Дјанго вам омогућава да правите апликације са погледима заснованим на класама или функцијама. Да пагинирате своју апликацију користећи приказ заснован на функцијама. Пратите ове кораке:

  • Отвори свој виевс.пи датотеку и увозите Пагинатор класа.
из дјанго.цоре.пагинатор увоз Пагинатор
  • Направите функцију приказа за приказивање постова у вашем ХТМЛ шаблону.
из дјанго.схортцутс увоз дати, пружити
из .модели увоз пошта
из дјанго.цоре.пагинатор увоз Пагинатор

дефлист_виев(захтев):
постови = Пост.објецтс.алл()
повратак изнети (захтев, 'блог/блог_лист_виев.хтмл', {'постови':постс})

  • Направите УРЛ образац да бисте приказали своје постове у прегледачу. Почните тако што ћете конфигурисати УРЛ образац у директоријуму вашег пројекта. Отвори урлс.пи датотеку на нивоу пројекта и додајте ово у урл обрасци:
из дјанго.урлс увоз укључити

урлпаттернс = [
...,
пут('', укључују ('блог.урлс')),
]

У горњем исечку кода, замените блог са именом ваше апликације. Ако не можете да направите разлику између пројекта и апликације, требало би да знате како се пројекат разликује од апликације у Дјангу.

Након што извршите горњу конфигурацију, креирајте а урлс.пи датотеку у директоријуму апликације (у овом случају, то је блог фолдер) и додајте овај исечак кода:

из дјанго.урлс увоз пут
из .виевс увоз лист_виев

урлпаттернс = [
пут('', лист_виев, наме='лист-виев'),
]

Када покренете свој сервер и идите на http://127.0.0.1:8000/, претраживач ће приказати ваше постове у складу са вашим наведеним стилом.

  • Измените функцију приказа да бисте додали логику пагинације. Ево примера:
дефлист_виев(захтев):
постови = Пост.објецтс.алл()
пагинатед = Пагинатор (објаве, 3)
број_странице = захтев. ГЕТ.гет('страна') #Преузмите тражени број странице са УРЛ-а

страница = пагинатед.гет_паге (број_странице)
повратак изнети (захтев, 'блог/блог_лист_виев.хтмл', {'страна':страна})

Горњи исечак кода уводи три нове променљиве: пагинирано, број стране, и страна. Свака променљива ради следеће:

  1. Тхе пагинирано променљива је иницијализована Пагинатор класа. У овом сценарију, подаци за пагинацију су скуп упита, постови, и то узима 3 као број ставки за приказ по страници.
  2. Тхе број стране променљива добија број странице из УРЛ-а. На пример, у http://127.0.0.1:8000/?page=2, број странице је 2.
  3. Тхе страна променљива преузима конкретну страницу за приказивање из пагинирано променљива.

До сада је Дјанго морао да пагинира вашу страницу. Можете да се крећете до одређених страница са пагинацијом користећи УРЛ формат приказан на овој слици:

  • Измените свој ХТМЛ шаблон да бисте приказали навигацију за странице са пагинацијом. Користећи методе доступне у Пагинатор цласс вам омогућава да креирате једноставну навигацију на вашој страници. Ево примера који можете да додате испод свог почетног ХТМЛ кода:
 {% иф паге.хас_превиоус %}
<ахреф="?паге={{паге.превиоус_паге_нумбер}}"
цласс="бтн бтн-сецондари мк-НН">Претходноа>
{% ендиф %}

<ахреф="?паге=1"класа="бтн бтн-секундарни">Првиа>

{% за број у паге.пагинатор.паге_ранге %}
{% иф нум == паге.нумбер %}
<спан>{{ број }}спан>
{% елсе %}
<ахреф="?паге={{нум}}"класа="бтн бтн-секундарни мк-2">
{{ број }}
а>
{% ендиф %}
{% ендфор %}

<ахреф="?паге={{паге.пагинатор.нум_пагес}}"класа="бтн бтн-секундарни мк-2">
Ласт
а>

{% иф паге.хас_нект %}
<ахреф="?паге={{паге.нект_паге_нумбер}}"класа="бтн бтн-секундарни мк-2">
Следећи
а>
{% ендиф %}

У горњем исечку кода, следеће методе се користе заједно са условним изјавама да би се утврдило како ће изгледати навигација по страници:

  1. хас_превиоус: Овај метод враћа Истина ако у пагинираним подацима постоји претходна страница.
  2. претходни_број_странице: Овај метод враћа вредност претходне странице.
  3. опсег_странице: Овај метод вам омогућава да сазнате колико страница имате у вашим пагинираним подацима.
  4. број: Овај метод враћа вредност тренутне странице.
  5. број_страница: Овај метод враћа укупан број страница.
  6. хас_нект: Ова функција се враћа Истина ако постоји следећа страница у пагинираним подацима.
  7. следећи број_странице: Овај метод враћа вредност следеће странице.

Дјанго пагинација у приказу заснованом на класама

У приказу заснованом на класама, не морате да увозите и иницијализујете Пагинатор класа. Да бисте применили пагинацију у приказу заснованом на класи, требало би да наведете атрибут под називом пагинате_би. Пратите ове кораке да бисте своју апликацију пагинирали приказом заснованим на класама:

  • Напишите поглед заснован на класи и наведите пагинате_би атрибут. Ево једноставног примера:
из .модели увоз пошта
из дјанго.виевс.генериц увоз ЛистВиев

класаПостЛистВиев(ЛистВиев):
модел = Пост
темплате_наме = 'блог/блог_лист_виев.хтмл'
цонтект_објецт_наме = 'страна'
пагинате_би = 2

Горњи приказ је верзија заснована на класи раније написаног погледа заснованог на функцијама. Овај поглед наслеђује Дјанго ЛистВиев класе, који се користи за навођење ставки. Своју логику дефинише атрибутима као што су модел, темплате_наме, цонтект_објецт_наме, и пагинате_би. Тхе пагинате_би атрибут одређује колико ће постова бити приказано по страници; у овом случају, 2 поста.

  • Када креирате свој приказ, измените свој урлс.пи датотеку да бисте је користили. Ево једноставног примера:
из .виевс увоз ПостЛистВиев

урлпаттернс = [
пут('', ПостЛистВиев.ас_виев(), наме='лист-виев'),
]

  • Измените свој ХТМЛ шаблон за употребу паге_обј за пагинацију.
 {% иф паге_обј.хас_превиоус %}
<ахреф="?паге={{паге_обј.превиоус_паге_нумбер}}"
цласс="бтн бтн-сецондари мк-НН">Претходноа>
{% ендиф %}

<ахреф="?паге=1"класа="бтн бтн-секундарни">Првиа>

{% за број у паге_обј.пагинатор.паге_ранге %}
{% иф нум == паге_обј.нумбер %}
<спанкласа="Тренутна страна">{{ број }}спан>
{% елсе %}
<ахреф="?паге={{нум}}"класа="бтн бтн-секундарни мк-2">
{{ број }}
а>
{% ендиф %}
{% ендфор %}

<ахреф="?паге={{паге_обј.пагинатор.нум_пагес}}"
цласс="бтн бтн-секундарни мк-НН">
Ласт
а>

{% иф паге.хас_нект %}
<ахреф="?паге={{паге_обј.нект_паге_нумбер}}"
цласс="бтн бтн-секундарни мк-НН">
Следећи
а>
{% ендиф %}

За разлику од ХТМЛ шаблона за приказ заснован на функцијама, овај шаблон користи паге_обј уместо страна да представља објекат странице. Ово је подразумевано понашање за пагинацију засновану на класама у Дјангу.

Користите пагинацију да бисте своју апликацију учинили скалабилном

Пагинација смањује оптерећење вашег сервера/базе података преузимањем и приказивањем мањих подскупова података у исто време. Са пагинацијом, учинак ваших веб локација ће се повећати. Ваши корисници ће такође имати добро искуство када користе вашу апликацију.

Прикази засновани на класи штеде више времена и кода у поређењу са приказима заснованим на функцијама, али можете користити било који од њих у зависности од ваших преференција и спецификација пројекта.