HTMXはDjangoと自然に統合できるツールであり、シンプルな設定だけで動的なWebアプリケーションを構築できます。今回のコンテンツでは、DjangoとHTMXを統合するための全体的な準備作業と設定方法を見ていきます。
1. HTMXをDjangoに統合するための準備作業
DjangoでHTMXを使用するには、以下のステップに従ってください:
1.1 HTMX JavaScriptライブラリのロード
HTMLテンプレートファイルの <head>
タグ内にCDNリンクを追加します。
<script src="https://unpkg.com/htmx.org"></script>
1.2 DjangoでHTMX属性を活用する
HTMXはHTTPリクエストを簡単に処理するための様々な属性を提供しています。
- hx-get: GETリクエストを送信するための属性
- hx-post: POSTリクエストを送信するための属性
- hx-target: サーバーの応答データを挿入するHTML要素を指定
HTMLコードの例
<div id="content">
<button hx-get="/get-data/" hx-target="#result">データを取得</button>
<button hx-post="/submit/" hx-target="#result">データを送信</button>
</div>
<div id="result">結果がここに表示されます。</div>
2. DjangoビューとHTMXリクエストの処理
2.1 GETリクエストの処理
from django.http import HttpResponse
def get_data(request):
if request.method == "GET":
return HttpResponse("<p>GETリクエスト処理完了!</p>")
2.2 POSTリクエストの処理
from django.http import HttpResponse
def submit_data(request):
if request.method == "POST":
return HttpResponse("<p>POSTリクエスト処理完了!</p>")
2.3 URLマッピング
from django.urls import path
from .views import get_data, submit_data
urlpatterns = [
path('get-data/', get_data, name='get_data'),
path('submit/', submit_data, name='submit_data'),
]
3. HTMX統合時の注意点
3.1 CSRFトークンの処理
DjangoはCSRF保護を基本として有効になっているため、POSTリクエスト時にCSRFトークンが必要です。HTMXでPOSTリクエストを処理するために、次の2つの方法のいずれかを選択してください:
1. HTML <meta>
タグとJavaScriptスクリプトを使用する
<meta name="csrf-token" content="{{ csrf_token }}">
<script>
document.body.addEventListener('htmx:configRequest', function (event) {
event.detail.headers['X-CSRFToken'] = document.querySelector('meta[name="csrf-token"]').content;
});
</script>
2. HTML <form>
タグ内に {% csrf_token %}
を挿入する
<form hx-post="/submit/" hx-target="#result">
{% csrf_token %}
<input type="text" name="name" placeholder="名前を入力してください">
<button type="submit">送信</button>
</form>
<div id="result"></div>
CSRFトークンの処理に関する詳細は、次回で取り上げます。
3.2 HTMXリクエストの区別
Django 4.2以降では、request.htmx
属性を使用してHTMXリクエストを区別できます。
from django.shortcuts import render
def my_view(request):
if request.htmx: # HTMXリクエスト
return render(request, 'partials/snippet.html')
return render(request, 'index.html') # 全ページ
4. HTMXとDjango統合の全体の流れ
4.1 完成したHTMLの例
<!DOCTYPE html>
<html>
<head>
<title>HTMXデモ</title>
<script src="https://unpkg.com/htmx.org"></script>
<meta name="csrf-token" content="{{ csrf_token }}">
<script>
document.body.addEventListener('htmx:configRequest', function (event) {
event.detail.headers['X-CSRFToken'] = document.querySelector('meta[name="csrf-token"]').content;
});
</script>
</head>
<body>
<div id="content">
<button hx-get="/get-data/" hx-target="#result">GETリクエスト</button>
<button hx-post="/submit/" hx-target="#result">POSTリクエスト</button>
</div>
<div id="result">結果がここに表示されます。</div>
</body>
</html>
今回のまとめ
今回のコンテンツでは、DjangoとHTMXを統合するための準備作業と設定方法を見ていきました。次回は、CSRFトークンの処理方法を中心に、DjangoとHTMXのセキュリティ統合について詳しく解説します。お楽しみに! 😊
Add a New Comment