Zvýšte efektivitu a škálovateľnosť svojej aplikácie Django implementáciou stránkovania. Tu je všetko, čo potrebujete vedieť, aby ste mohli začať.
Stránkovanie zlepšuje používateľskú skúsenosť a výkon aplikácií pri práci s veľkými množinami údajov. Bez zavedeného systému stránkovania bude vaša aplikácia po väčšinu času zaostávať. S Django môžete využiť vstavanú podporu pre stránkovanie na stránkovanie vašej webovej aplikácie.
Ako funguje stránkovanie v Django
Implementácia stránkovania v Django sa môže líšiť v závislosti od toho, či pracujete s pohľadmi založenými na triedach alebo funkciách. Bez ohľadu na preferovanú metódu zostávajú základné princípy rovnaké.
Django používa triedu tzv Paginátor implementovať stránkovanie. The Paginátor poskytuje niekoľko metód, ktoré môžete použiť na prispôsobenie stránkovania. Pri inicializácii Paginátor trieda, vyžaduje dva povinné parametre; údaje na stránkovanie a počet položiek, ktoré sa majú zobraziť na stránke. The Paginátor má tretí voliteľný parameter pre siroty na určenie minimálneho počtu položiek, ktoré by mali zostať na poslednej strane. Štandardne je hodnota sirôt 0, čo znamená, že všetky stránky majú rovnaký počet položiek.
Adresa URL pre stránkovanú stránku Django je podobná tejto: https://example.com/products/?page=3. The stránku parameter v URL hovorí Djangovi, ktorú stránku chce používateľ vidieť. Pomáha tiež Django určiť, ktorá časť údajov sa má pre danú stránku zobraziť.
Kód použitý v tomto projekte je dostupný v a úložisko GitHub a môžete ho bezplatne používať na základe licencie MIT.
Nastavte svoj projekt Django na stránkovanie
Predtým, ako začnete stránkovať v Django, musíte mať nainštalovali Django a nastavili ho na vašom počítači. Po nastavení Django na vašom počítači by ste mali vytvoriť aplikáciu a model pre vaše dáta. Tu je jednoduchý model, ktorý môžete skopírovať:
od django.db importovať modelov
triedaPríspevok(modely. Model):
titul = modely. CharField (max_length=255)
autor = modely. CharField (max_length=50)
obsah = modely. Textové pole('Uverejniť obsah')
def__str__(ja):
vrátiť vlastný.titul
Vyššie uvedený model je určený pre blogovú aplikáciu. Definuje pole názvu, autora a obsahu pre každý blogový príspevok. Má tiež metódu, ktorá vracia názov príspevku pre lepšiu používateľskú skúsenosť na paneli správcu.
Migrujte svoj model spustením tohto príkazu:
python manage.py makemigrations && python manage.py migrate
Po migrácii modelu by ste mali prejsť na blog>admin.py aby ste to zaregistrovali. Nasledujúci kód úspešne zaregistruje model s názvom Príspevok.
od django.contrib importovať admin
od .modelky importovať Príspevok # nahraďte 'Príspevok' názvom svojho modelu
admin.site.register (príspevok)
Ďalej vytvorte superužívateľa a pridajte príspevky do svojho administračného panela Django. Ak chcete vytvoriť superužívateľa, použite tento príkaz:
python manage.py vytvára superužívateľa
Vyššie uvedený príkaz vás prevedie procesom znázorneným na obrázku nižšie:
Po vytvorení superužívateľa spustite vývojový server a prejdite na panel správcu.
runserver python manage.py
Po spustení servera prejdite na http://127.0.0.1:8000/admin, prihláste sa a pridajte pár príspevkov.
Potom vytvorte šablónu HTML na vykreslenie vašich príspevkov v prehliadači. Vytvorte si súbor v nasledujúcom adresári: your_app/templates/your_app_name/index.html. Ak nerozumiete, ako vytvárať šablóny, prečítajte si naše úvodný sprievodca architektúrou MVT spoločnosti Django.
Stránkovanie Django v zobrazení založenom na funkciách
Django vám umožňuje vytvárať aplikácie so zobrazeniami založenými na triedach alebo zobrazeniach založených na funkciách. Stránkovanie aplikácie pomocou zobrazenia založeného na funkciách. Nasleduj tieto kroky:
- Otvor tvoj views.py súbor a importujte súbor Paginátor trieda.
od django.core.paginator importovať Paginátor
- Vytvorte funkciu zobrazenia na vykreslenie príspevkov vo vašej šablóne HTML.
od django.skratky importovať vykresliť
od .modelky importovať Príspevok
od django.core.paginator importovať Paginátor
defzoznam_zobrazenie(žiadosť):
posts = Post.objects.all()
vrátiť vykresliť (žiadosť, 'blog/blog_list_view.html', {'príspevky':príspevky})
- Vytvorte vzor adresy URL na zobrazenie vašich príspevkov v prehliadači. Začnite konfiguráciou vzoru adresy URL v adresári projektu. Otvor urls.py súbor na úrovni projektu a pridajte ho do súboru vzory url:
od django.urls importovať zahŕňajú
urlpatterns = [
...,
cesta ('', zahŕňať('blog.urls')),
]
Vo vyššie uvedenom útržku kódu nahraďte blog s názvom vašej aplikácie. Ak nedokážete rozlíšiť medzi projektom a aplikáciou, mali by ste to vedieť ako sa projekt líši od aplikácie v Django.
Po vykonaní vyššie uvedenej konfigurácie vytvorte a urls.py súbor v adresári aplikácie (v tomto prípade je to blog priečinok) a pridajte tento útržok kódu:
od django.urls importovať cesta
od .názory importovať zoznam_zobrazenie
urlpatterns = [
cesta ('', zobrazenie_zoznamu, meno='list-view'),
]
Keď spustíte server a prejdite na http://127.0.0.1:8000/, prehliadač zobrazí vaše príspevky podľa zadanej šablóny štýlov.
- Upravte svoju funkciu zobrazenia a pridajte logiku stránkovania. Tu je príklad:
defzoznam_zobrazenie(žiadosť):
posts = Post.objects.all()
stránkované = Paginátor (príspevky, 3)
page_number = žiadosť. GET.get('stránka') #Získajte požadované číslo stránky z adresy URL
page = paginated.get_page (page_number)
vrátiť vykresliť (žiadosť, 'blog/blog_list_view.html', {'stránka':strana})
Vyššie uvedený útržok kódu zavádza tri nové premenné: stránkované, číslo strany, a stránku. Každá premenná robí nasledovné:
- The stránkované premenná inicializovala Paginátor trieda. V tomto scenári sú údaje, ktoré sa majú stránkovať, množina dotazov, príspevky, a trvá to 3 ako počet položiek na zobrazenie na stránke.
- The číslo strany premenná získa číslo stránky z adresy URL. Napríklad v http://127.0.0.1:8000/?page=2, číslo strany je 2.
- The stránku premenná získa konkrétnu stránku na vykreslenie z stránkované premenlivý.
Django už musel ostránkovať vašu stránku. Pomocou formátu adresy URL zobrazeného na tomto obrázku môžete prejsť na konkrétne stránkované stránky:
- Upravte svoju šablónu HTML tak, aby zobrazovala navigáciu pre stránkované stránky. Pomocou metód dostupných v Paginátor trieda vám umožňuje vytvoriť jednoduchú navigáciu na vašej stránke. Tu je príklad, ktorý môžete pridať pod svoj počiatočný kód HTML:
{% if page.has_previous %}
<ahref="?page={{page.previous_page_number}}"
class="btn btn-secondary mx-NN">Predchádzajúcea>
{% koniec Ak %}<ahref="?page=1"trieda="btn btn-sekundárne">najprva>
{% for num in page.paginator.page_range %}
{% if num == page.number %}
<rozpätie>{{ num }}rozpätie>
{% else %}
<ahref="?page={{num}}"trieda="btn btn-sekundárne mx-2">
{{ num }}
a>
{% koniec Ak %}
{% endfor %}<ahref="?page={{page.paginator.num_pages}}"trieda="btn btn-sekundárne mx-2">
Posledný
a>
{% if page.has_next %}
<ahref="?page={{page.next_page_number}}"trieda="btn btn-sekundárne mx-2">
Ďalšie
a>
{% koniec Ak %}
Vo vyššie uvedenom útržku kódu sa v spojení s podmienenými príkazmi používajú nasledujúce metódy na určenie toho, ako bude vyzerať navigácia stránkovaním:
- has_previous: Táto metóda vráti Pravda ak sa v stránkovaných údajoch nachádza predchádzajúca strana.
- predchádzajúce_číslo_strany: Táto metóda vráti hodnotu predchádzajúcej stránky.
- rozsah_stránok: Táto metóda vám umožňuje zistiť, koľko stránok máte v stránkovaných údajoch.
- číslo: Táto metóda vráti hodnotu aktuálnej stránky.
- počet_strán: Táto metóda vráti celkový počet strán.
- has_next: Táto funkcia sa vráti Pravda ak sa v stránkovaných údajoch nachádza ďalšia strana.
- next_page_number: Táto metóda vráti hodnotu nasledujúcej stránky.
Stránkovanie Django v zobrazení podľa triedy
V zobrazení založenom na triede nemusíte importovať a inicializovať súbor Paginátor trieda. Ak chcete implementovať stránkovanie v zobrazení založenom na triedach, mali by ste zadať atribút s názvom stránkovať_ podľa. Pri stránkovaní aplikácie pomocou zobrazenia založeného na triede postupujte podľa týchto krokov:
- Napíšte pohľad založený na triede a zadajte stránkovať_ podľa atribút. Tu je jednoduchý príklad:
od .modelky importovať Príspevok
od django.views.generic importovať ListView
triedaPostListView(Zobrazenie zoznamu):
model = príspevok
template_name = 'blog/blog_list_view.html'
kontext_názov_objektu = 'stránka'
stránkovať_ podľa = 2
Vyššie uvedený pohľad je triedou založenou verziou funkčného pohľadu napísanou skôr. Tento pohľad zdedil Django ListView triedy, ktorá sa používa na výpis položiek. Svoju logiku definuje atribútmi ako napr Model, názov_šablóny, kontext_názov_objektu, a stránkovať_ podľa. The stránkovať_ podľa atribút určuje, koľko príspevkov sa zobrazí na stránke; v tomto prípade 2 príspevky.
- Po vytvorení zobrazenia ho upravte urls.py súbor použiť. Tu je jednoduchý príklad:
od .názory importovať PostListView
urlpatterns = [
cesta ('', PostListView.as_view(), name='list-view'),
]
- Upravte svoju šablónu HTML, ktorú chcete použiť page_obj pre stránkovanie.
{% if page_obj.has_previous %}
<ahref="?page={{page_obj.previous_page_number}}"
class="btn btn-secondary mx-NN">Predchádzajúcea>
{% koniec Ak %}<ahref="?page=1"trieda="btn btn-sekundárne">najprva>
{% for num in page_obj.paginator.page_range %}
{% if num == page_obj.number %}
<rozpätietrieda="aktuálna stránka">{{ num }}rozpätie>
{% else %}
<ahref="?page={{num}}"trieda="btn btn-sekundárne mx-2">
{{ num }}
a>
{% koniec Ak %}
{% endfor %}<ahref="?page={{page_obj.paginator.num_pages}}"
class="btn btn-secondary mx-NN">
Posledný
a>
{% if page.has_next %}
<ahref="?page={{page_obj.next_page_number}}"
class="btn btn-secondary mx-NN">
Ďalšie
a>
{% koniec Ak %}
Na rozdiel od šablóny HTML pre zobrazenie založené na funkciách táto šablóna používa page_obj namiesto stránku reprezentovať objekt stránky. Toto je predvolené správanie pre stránkovanie založené na triedach v Django.
Použite stránkovanie, aby bola vaša aplikácia škálovateľná
Stránkovanie znižuje zaťaženie vášho servera/databázy tým, že načítava a zobrazuje menšie podmnožiny údajov naraz. Vďaka stránkovaniu sa výkon vašich webových stránok zvýši. Vaši používatelia budú mať tiež dobré skúsenosti s používaním vašej aplikácie.
Pohľady založené na triedach šetria viac času a kódu v porovnaní so zobrazeniami založenými na funkciách, ale môžete použiť ktorékoľvek z nich v závislosti od vašich preferencií a špecifikácií projektu.