Kada se bavite razvojem weba, jedan od značajnih elemenata s kojima se većina programera susreće je predstavljanje istog izgleda i osjećaja na web stranici. Jedan od najefikasnijih načina za postizanje takve konzistentnosti je korištenje osnovnih predložaka ili base.html u Djangu, Python web okviru visokog nivoa koji promovira brzi razvoj. Drupal koristi koncept nasljeđivanja u najboljem slučaju i pruža mehanizam za proširenje osnovnih predložaka na više podređenih šablona.
Da biste riješili problem postojanog dosljednog elementa dizajna na vašoj web stranici, proširenje dva osnovna predloška može biti zgodno. Osnovni predlošci sadrže HTML skeletnu strukturu koja ostaje konstantna u cijeloj web aplikaciji. Podređeni predlošci sadrže sadržaj za pojedinačne web stranice koji se razlikuje od stranice do stranice. Ovi podređeni predlošci nasljeđuju svojstva od roditeljskih osnovnih predložaka koristeći nasljeđivanje šablona.
Hajde sada da se udubimo u objašnjenje koda koji se odnosi na problem, korak po korak.
Osnovni predložak uzorka može se definirati kao:
<!DOCTYPE html>
<html lang="en">
<head>
{% block head %}
<title>My Site</title>
{% endblock %}
</head>
<body>
{% block content %}
{% endblock %}
</body>
</html>
base.html se tada može proširiti podređenim šablonom kao:
{% extends "base.html" %}
{% block head %}
<title>My Page</title>
{% endblock %}
{% block content %}
<h1>Welcome!</h1>
<p>Here is your content...</p>
{% endblock %}
Radi se o proširenju jednog osnovnog predloška. Ali što ako imate dva osnovna predloška za proširenje? Ovdje stvari postaju malo zeznute jer Python ne podržava direktno višestruko nasljeđivanje.
Zaobilazna rješenja za više osnovnih predložaka
Trik leži u podjeli vašeg sadržaja na više sekcija ili blokova. Ispod je primjer kako možete upravljati proširenjem dva osnovna predloška pomoću blokova.
{% block content %}
{% block content_one %}
{% endblock %}
{% block content_two %}
{% endblock %}
{% endblock %}
Ovdje je blok 'content' iz osnovnog predloška dalje podijeljen na dva druga bloka – 'content_one' i 'content_two'. Različiti osnovni predlošci mogu proširiti ove blokove.
Python Libray: Django
Kada je u pitanju razvoj weba pomoću Pythona, Django je najpopularniji i najmoćniji Python Web Framework. Prati princip DRY (Ne ponavljaj se) koji podstiče ponovnu upotrebu komponenti. Django templates engine, dio Django frameworka, je osnovni, ali moćan alat za front-end web razvoj koji nam omogućava da proširimo vrijednost Pythona na web.
U zaključku, moguće je proširiti dva osnovna predloška u Djangu, iako okvir direktno ne podržava višestruko nasljeđivanje. Ključno je segmentirati sadržaj u više blokova koje različiti osnovni predlošci mogu proširiti. Ovo je najefikasnije rješenje za problem i donosi moć ponovne upotrebe vašim predlošcima, čineći tako vaš kod efikasnijim i upravljivijim.
Napomena: Django šablonski mehanizam koristi jezik pod nazivom Django Template Language (DTL) koji je posudio neke od svoje sintakse od Pythona, ali sam nije Python kod.