이 글에서는 Django에서 모델 데이터를 렌더링하는 테이블을 만드는 방법을 살펴보겠습니다. HTML의 <table> 태그를 일일이 작성하지 않아도, django_tables2라는 가벼운 Django 테이블 라이브러리를 사용하면 모델 데이터를 테이블 형태로 바로 출력할 수 있으며, 컬럼 정렬과 페이지 매김(페이징) 기능까지 기본적으로 제공됩니다.
예제 따라 하기
먼저 프로젝트와 앱을 생성하고 URL 설정을 마친 상태에서 시작합니다.
1. django_tables2 설치
다음 명령어로 패키지를 설치합니다.
pip install django_tables2
2. settings.py 설정
앱 등록 목록에 django_tables2를 추가합니다.
INSTALLED_APPS += ["django_tables2"]
3. models.py – 테스트용 모델 작성
간단한 모델 하나를 만들어 데이터를 담을 준비를 합니다.
from django.db import models
# Create your models here.
class Data(models.Model):
Name = models.CharField(max_length=100)
salary = models.CharField(max_length=20)
4. urls.py – 라우팅 연결
URL을 추가하고 테이블 뷰와 연결합니다.
from django.urls import path
from . import views
urlpatterns = [
path('table', views.TableView.as_view(), name='table')
]
5. views.py – 테이블 클래스와 뷰 작성
Django 폼을 만드는 방식과 거의 동일하게 테이블 클래스를 정의하고, 이를 렌더링할 뷰를 작성합니다.
from .models import Data
import django_tables2 as tables
# 폼을 만들듯이 테이블 클래스를 선언합니다
class SimpleTable(tables.Table):
class Meta:
model = Data
# 테이블을 렌더링하는 뷰입니다
class TableView(tables.SingleTableView):
table_class = SimpleTable
queryset = Data.objects.all()
template_name = "table_example.html"
여기서는 Data 모델 기반의 테이블을 만든 뒤, 이를 화면에 출력할 뷰를 정의했습니다. queryset 부분에는 원하는 필터 조건을 넣어 특정 데이터만 가져올 수도 있고, template_name에는 테이블을 보여줄 템플릿 파일을 지정합니다. 한 페이지에 표시할 행 수를 조절하려면 paginate_by = 10처럼 값을 추가하면 됩니다.
6. templates/table_example.html – 템플릿 작성
templates 폴더를 만들고 그 안에 table_example.html 파일을 다음 내용으로 작성합니다.
{% include 'material/includes/material_css.html' %}
{% include 'material/includes/material_js.html' %}
<!DOCTYPE html>
<html>
<head>
<title>TUT</title>
</head>
<body>
# 아래 두 줄이 테이블을 렌더링합니다
{% load django_tables2 %}
{% render_table table %}
</body>
</html>
템플릿 상단에서 Material CSS/JS 같은 기본 스타일을 포함시키고, {% load django_tables2 %}로 라이브러리 템플릿 태그를 로드한 후 {% render_table table %}로 views.py에서 만든 테이블을 출력합니다.
실행 결과 확인
개발 서버를 실행한 뒤 /table 경로에 접속하면 아래와 같이 모델 데이터가 테이블로 표시됩니다. 각 컬럼 헤더를 클릭하면 오름차순·내림차순 정렬이 되고, 데이터가 많으면 자동으로 페이지 매김이 적용되는 것도 확인할 수 있습니다.
