Robuuste asynchrone communicatie met de server eenvoudig implementeren
HTMX maakt het mogelijk om krachtige asynchrone functionaliteiten te implementeren in servergerichte webontwikkelingsframeworks zoals Django, zonder de complexiteit van JavaScript. In dit deel duiken we dieper in de interne werking van HTMX bij het verwerken van Ajax-verzoeken en de communicatie met Django-views, aan de hand van concrete voorbeelden.

De kern van HTMX: HTML is het bericht
Traditionele Ajax-communicatie (bijv. met axios, fetch) omvat het ontvangen van JSON-gegevens van de server, waarna JavaScript deze interpreteert en de pagina opnieuw tekent. HTMX volgt echter het principe van 'Hypermedia as the Engine of Application State (HATEOAS)'. Dit betekent dat de server, in plaats van data (JSON), volledige HTML-fragmenten verstuurt, en HTMX deze simpelweg 'vervangt' op de aangewezen locatie.
De 4 stappen van HTMX Ajax-communicatie
- Gebeurtenis triggeren: De gebruiker interacteert met een HTML-element (zoals een knop).
- Ajax-verzoek: HTMX roept de
fetch-API van de browser aan om een verzoek naar de server te sturen. - HTML-antwoord: De server verwerkt de logica en retourneert alleen het benodigde HTML-fragment, niet de volledige pagina.
- DOM-vervanging (Swap): HTMX voegt de ontvangen HTML direct in het element dat is gespecificeerd door
hx-target.
Praktisch voorbeeld: "Vind ik leuk"-knop implementeren
Laten we, verder dan alleen het wijzigen van een getal, bekijken hoe HTML-fragmenten worden uitgewisseld tussen de server en de client.
1. Frontend (Template)
Dit is een methode waarbij een verzoek wordt verzonden met hx-post, en het gehele #like-section wordt vervangen door het antwoord van de server.
<div id="like-section">
<button hx-post="/like/"
hx-target="#like-section"
hx-swap="outerHTML">
❤️ 좋아요 ({{ likes_count }})
</button>
</div>
Als, zoals in dit voorbeeld, hx-target en hx-swap direct in de HTML-tag zijn gespecificeerd, weet je bij het herlezen van de code meteen "waar en hoe deze knop de pagina zal wijzigen", zonder dat je door JavaScript-bestanden hoeft te zoeken. Persoonlijk vind ik het misschien een beetje onhandig dat je de View-functie van de backend moet doorzoeken om de code te begrijpen, maar omdat de hx- code in de HTML-tag is ingebed, zoals in het voorbeeld hierboven, vraag ik me af of dit vanuit het oogpunt van Locality of Behavior beter is dan inline JavaScript.
2. Backend (Django View)
Het belangrijke punt hier is dat u render gebruikt in plaats van JsonResponse.
from django.shortcuts import render
def like_post(request):
# 좋아요 로직 처리 (예: DB 업데이트)
new_count = 10
# 전체 페이지가 아닌, 버튼 부분만 포함된 작은 템플릿 조각을 반환합니다.
return render(request, 'partials/_like_button.html', {
'likes_count': new_count
})
3. Deel-template voor antwoord
Dit is het 'HTML-fragment' dat de server naar de client zal sturen. Aangezien hx-swap="outerHTML" is ingesteld, zal deze inhoud het gehele bestaande #like-section vervangen.
<!-- partials/_like_button.html -->
<div id="like-section">
<button hx-post="/like/"
hx-target="#like-section"
hx-swap="outerHTML"
class="btn-liked">
❤️ 좋아요 ({{ likes_count }})
</button>
</div>
Waarom doen we dit? (Begrip van het principe)
Bij de traditionele methode moest je, na het ontvangen van JsonResponse({'likes': 10}), JavaScript-code schrijven zoals document.getElementById('count').innerText = data.likes.
Maar de HTMX-methode: 1. Voorkomen van logicafragmentatie: De server (Django-template) beheert de definitie van "hoe het scherm moet veranderen wanneer er op 'Vind ik leuk' wordt geklikt". 2. Data-view synchronisatie: Omdat de HTML die door de server wordt verzonden direct op het scherm wordt geplaatst, worden fouten die optreden bij het verwerken van gegevens aan de clientzijde geëlimineerd.
Ter afsluiting van dit deel
Het gebruik van HTMX is niet alleen het verminderen van code, maar een terugkeer naar de essentie van het web: het optimaal benutten van 'Hypermedia (HTML)'. Hierdoor kunnen ontwikkelaars ontsnappen aan de complexiteit van JavaScript-statusbeheer en zich meer richten op de serverlogica.
Lees ook :
- Dynamische Webontwikkeling Vereenvoudigen met Django en HTMX (Deel 1)
- Django en HTMX: Dynamische webontwikkeling vereenvoudigen (Deel 3): Integratie met Django
- Dynamische webontwikkeling vereenvoudigen met Django en HTMX (deel 4): Payload-overdrachtsmethoden
- Django en HTMX: Het vereenvoudigen van dynamische webontwikkeling (deel 5)
- Django en HTMX: Dynamische webontwikkeling vereenvoudigen (deel 6): HTML terugkeer methode
- Django en HTMX: Het vereenvoudigen van dynamische webontwikkeling (deel 7): JSON teruggeven
There are no comments.