Uzlabojiet savas Django lietojumprogrammas efektivitāti un mērogojamību, ieviešot lappušu piešķiršanu. Šeit ir viss, kas jums jāzina, lai sāktu.
Lapu ievietošana uzlabo lietotāja pieredzi un lietojumprogrammu veiktspēju, strādājot ar lielām datu kopām. Ja nav izveidota lappušu sistēma, jūsu lietojumprogramma lielākoties atpaliks. Izmantojot Django, varat izmantot iebūvēto lappuses atbalstu, lai sakārtotu savas tīmekļa lietojumprogrammas lapas.
Kā lapās darbojas Django
Lapu ievietošanas ieviešana programmā Django var atšķirties atkarībā no tā, vai strādājat ar skatiem, kuru pamatā ir klases vai funkcijas. Neatkarīgi no izvēlētās metodes pamatprincipi paliek nemainīgi.
Django izmanto klasi ar nosaukumu Lapu kārtotājs lai ieviestu lappusi. The Lapu kārtotājs klase nodrošina vairākas metodes, kuras varat izmantot, lai pielāgotu lappušu skaitu. Inicializējot Lapu kārtotājs klasē, ir nepieciešami divi obligātie parametri; lappušu pārveidojamie dati un vienā lapā rādāmo vienumu skaits. The Lapu kārtotājs
izmanto trešo neobligāto parametru bāreņiem, lai norādītu minimālo vienumu skaitu, kam jāpaliek pēdējā lapā. Pēc noklusējuma bāreņu vērtība ir 0, kas nozīmē, ka visās lapās ir vienāds vienumu skaits.Django lapas URL ir līdzīgs šim: https://example.com/products/?page=3. The lappuse parametrs URL norāda Django, kuru lapu lietotājs vēlas redzēt. Tas arī palīdz Django noteikt, kuru datu daļu parādīt šai lapai.
Šajā projektā izmantotais kods ir pieejams a GitHub repozitorijs un to varat izmantot bez maksas saskaņā ar MIT licenci.
Iestatiet savu Django projektu lappušu ievietošanai
Pirms lappušu veidošanas Django, jums ir jābūt instalējiet Django un iestatiet to savā datorā. Pēc Django iestatīšanas datorā ir jāizveido lietotne un datu modelis. Šeit ir vienkāršs modelis, ko varat kopēt:
no django.db imports modeļiem
klasēPost(modeļi. Modelis):
nosaukums = modeļi. CharField (max_length=255)
autors = modeļi. CharField (max_length=50)
saturs = modeļi. TextField("Izlikt saturu")
def__str__(pats):
atgriezties sevis.nosaukums
Iepriekš minētais modelis ir paredzēts emuāra lietojumprogrammai. Tas nosaka katra emuāra ieraksta nosaukumu, autoru un satura laukus. Tam ir arī metode, kas atgriež ziņas nosaukumu, lai nodrošinātu labāku lietotāja pieredzi administratora panelī.
Migrējiet savu modeli, izpildot šo komandu:
python manage.py makemigrations && python manage.py migrēt
Pēc modeļa migrēšanas jums vajadzētu pāriet uz emuārs> admin.py lai to reģistrētu. Šis kods veiksmīgi reģistrē modeli ar nosaukumu Post.
no django.contrib imports admin
no .modeļi imports Post # aizstājiet “Post” ar sava modeļa nosaukumu
admin.site.register (Ziņa)
Pēc tam izveidojiet superlietotāju un pievienojiet ziņas savā Django administratora panelī. Lai izveidotu superlietotāju, izmantojiet šo komandu:
python manage.py createsuperuser
Iepriekš minētā komanda vadīs jūs caur procesu, kas parādīts zemāk esošajā attēlā:
Pēc superlietotāja izveides palaidiet izstrādes serveri un dodieties uz administratora paneli.
python manage.py runserver
Kad serveris sāk darboties, dodieties uz http://127.0.0.1:8000/admin, piesakieties un pievienojiet dažas ziņas.
Pēc tam izveidojiet HTML veidni, lai atveidotu savas ziņas pārlūkprogrammā. Izveidojiet failu šādā direktorijā: your_app/templates/your_app_name/index.html. Ja nesaprotat, kā izveidot veidnes, izlasiet mūsu ievada ceļvedis Django MVT arhitektūrā.
Django lappušu veidošana uz funkcijām balstītā skatā
Django ļauj veidot lietojumprogrammas ar skatiem, kuru pamatā ir klases vai funkcijas. Lietojumprogrammas lappušu grozīšana, izmantojot uz funkcijām balstītu skatu. Veiciet tālāk norādītās darbības.
- Atver savu views.py failu un importēt Lapu kārtotājs klasē.
no django.core.paginator imports Lapu kārtotājs
- Izveidojiet skata funkciju, lai renderētu ziņas savā HTML veidnē.
no django.shortcuts imports renderēt
no .modeļi imports Post
no django.core.paginator imports Lapu kārtotājs
deflist_view(pieprasījums):
ziņas = Post.objects.all()
atgriezties renderēt (pieprasīt, 'blog/blog_list_view.html', {'ziņas':posts})
- Izveidojiet URL šablonu, lai jūsu ziņas tiktu rādītas pārlūkprogrammā. Sāciet ar URL raksta konfigurēšanu sava projekta direktorijā. Atveriet urls.py failu projekta līmenī un pievienojiet to URL raksti:
no django.urls imports ietver
urlpatterns = [
...,
ceļš ('', ietver('blog.urls')),
]
Iepriekš minētajā koda fragmentā nomainiet emuārs ar jūsu lietotnes nosaukumu. Ja nevarat atšķirt projektu no lietotnes, jums tas jāzina kā projekts atšķiras no lietotnes Django.
Pēc iepriekš minētās konfigurācijas izveidojiet a urls.py failu jūsu lietotņu direktorijā (šajā gadījumā tas ir emuārs mapi) un pievienojiet šo koda fragmentu:
no django.urls imports ceļš
no .skatījumi imports list_view
urlpatterns = [
ceļš ('', saraksta_skats, nosaukums="saraksta skats"),
]
Kad palaižat savu serveri un dodieties uz http://127.0.0.1:8000/, pārlūkprogramma parādīs jūsu ziņas atbilstoši jūsu norādītajai stila lapai.
- Modificējiet savu skata funkciju, lai pievienotu lappušu veidošanas loģiku. Šeit ir piemērs:
deflist_view(pieprasījums):
ziņas = Post.objects.all()
paginated = Lapu kārtotājs (ziņas, 3)
lapas_numurs = pieprasījums. GET.get('lappuse') #Iegūstiet pieprasīto lapas numuru no URL
lapa = paginated.get_page (page_number)
atgriezties renderēt (pieprasīt, 'blog/blog_list_view.html', {'lappuse':lappuse})
Iepriekš minētais koda fragments ievieš trīs jaunus mainīgos: paginēts, lapas_numurs, un lappuse. Katrs mainīgais veic šādas darbības:
- The paginēts mainīgais inicializēts Lapu kārtotājs klasē. Šajā scenārijā lappušu maināmie dati ir vaicājumu kopa, ziņas, un tas aizņem 3 kā vienā lapā parādāmo vienumu skaitu.
- The lapas_numurs mainīgais iegūst lapas numuru no URL. Piemēram, iekšā http://127.0.0.1:8000/?page=2, lapas numurs ir 2.
- The lappuse mainīgais izgūst konkrēto atveidojamo lapu no paginēts mainīgs.
Līdz šim laikam Django ir izveidojis jūsu lapas lappuses. Varat pāriet uz konkrētām lappušu lapām, izmantojot URL formātu, kas parādīts šajā attēlā:
- Modificējiet savu HTML veidni, lai parādītu lappušu navigāciju. Izmantojot vietnē pieejamās metodes Lapu kārtotājs klase ļauj izveidot vienkāršu navigāciju savā lapā. Tālāk ir sniegts piemērs, ko varat pievienot zem sava sākotnējā HTML koda:
{% if page.has_previous %}
<ahref="?page={{page.previous_page_number}}"
class="btn btn-secondary mx-NN">Iepriekšējaisa>
{% endif %}<ahref="?page=1"klasē="btn btn-secondary">Pirmkārta>
{% no num in page.paginator.page_range %}
{% if num == page.number %}
<span>{{numurs }}span>
{% cits %}
<ahref="?page={{num}}"klasē="btn btn-secondary mx-2">
{{numurs }}
a>
{% endif %}
{% endfor %}<ahref="?page={{page.paginator.num_pages}}"klasē="btn btn-secondary mx-2">
Pēdējais
a>
{% if page.has_next %}
<ahref="?page={{page.next_page_number}}"klasē="btn btn-secondary mx-2">
Nākamais
a>
{% endif %}
Iepriekš minētajā koda fragmentā kopā ar nosacījumu priekšrakstiem tiek izmantotas šādas metodes, lai noteiktu, kā izskatīsies lappušu navigācija:
- ir_iepriekšējais: šī metode atgriežas Taisnība ja lappušu datos ir iepriekšējā lapa.
- iepriekšējā_lapas_numurs: šī metode atgriež iepriekšējās lapas vērtību.
- page_range: šī metode ļauj uzzināt, cik lapu ir jūsu lappušu datos.
- numuru: šī metode atgriež pašreizējās lapas vērtību.
- lappušu_skaits: šī metode atgriež kopējo lapu skaitu.
- ir_nākamais: šī funkcija atgriežas Taisnība ja lappušu datos ir nākamā lapa.
- nākamās_lapas_numurs: šī metode atgriež nākamās lapas vērtību.
Django lappušu veidošana klases skatījumā
Klases skatā jums nav jāimportē un jāinicializē Lapu kārtotājs klasē. Lai ieviestu lappušu piešķiršanu klases skatā, jānorāda atribūts, kas tiek izsaukts paginate_by. Veiciet tālāk norādītās darbības, lai pievienotu lietotnes lapas ar klases skatu:
- Uzrakstiet uz klases skatu un norādiet paginate_by atribūts. Šeit ir vienkāršs piemērs:
no .modeļi imports Post
no django.views.generic imports ListView
klasēPostListView(Saraksta skats):
modelis = Pasts
veidnes_nosaukums = 'blog/blog_list_view.html'
konteksta_objekta_nosaukums = 'lappuse'
paginate_by = 2
Iepriekš minētais skats ir uz funkciju balstītā skata klases versija, kas rakstīta iepriekš. Šis skats ir mantojis Django skatu ListView klase, ko izmanto vienumu uzskaitīšanai. Tā definē savu loģiku ar tādiem atribūtiem kā modelis, veidnes_nosaukums, konteksta_objekta_nosaukums, un paginate_by. The paginate_by atribūts nosaka, cik ziņu rādīt vienā lapā; šajā gadījumā 2 ziņas.
- Kad esat izveidojis skatu, mainiet savu urls.py failu, lai to izmantotu. Šeit ir vienkāršs piemērs:
no .skatījumi imports PostListView
urlpatterns = [
ceļš ('', PostListView.as_view(), nosaukums="saraksta skats"),
]
- Pārveidojiet savu HTML veidni, lai to izmantotu page_obj par lappusi.
{% if page_obj.has_previous %}
<ahref="?page={{page_obj.previous_page_number}}"
class="btn btn-secondary mx-NN">Iepriekšējaisa>
{% endif %}<ahref="?page=1"klasē="btn btn-secondary">Pirmkārta>
{% no num in page_obj.paginator.page_range %}
{% if num == page_obj.number %}
<spanklasē="Pašreizējā lapa">{{numurs }}span>
{% cits %}
<ahref="?page={{num}}"klasē="btn btn-secondary mx-2">
{{numurs }}
a>
{% endif %}
{% endfor %}<ahref="?page={{page_obj.paginator.num_pages}}"
class="btn btn-secondary mx-NN">
Pēdējais
a>
{% if page.has_next %}
<ahref="?page={{page_obj.next_page_number}}"
class="btn btn-secondary mx-NN">
Nākamais
a>
{% endif %}
Atšķirībā no HTML veidnes funkciju skatam, šī veidne izmanto page_obj tā vietā lappuse lai attēlotu lapas objektu. Šī ir noklusējuma darbība klasē balstītai lappušu veidošanai pakalpojumā Django.
Izmantojiet lappuses, lai padarītu lietojumprogrammu mērogojamu
Lapu ievietošana samazina servera/datu bāzes slodzi, vienlaikus ienesot un rādot mazākas datu apakškopas. Izmantojot lappušu izplatīšanu, palielināsies jūsu vietņu veiktspēja. Jūsu lietotājiem būs arī laba pieredze, izmantojot jūsu lietojumprogrammu.
Klases skati ietaupa vairāk laika un koda, salīdzinot ar uz funkcijām balstītiem skatiem, taču varat izmantot jebkuru no tiem atkarībā no jūsu vēlmēm un projekta specifikācijām.