Django로 개발한 웹사이트에 1000000처럼 긴 숫자가 그대로 노출되면 다소 기계적인 인상을 줍니다. 이럴 때 유용한 것이 바로 django.contrib.humanize입니다. humanize는 Django가 기본으로 제공하는 템플릿 필터 모음으로, 데이터를 사람이 읽기 쉬운 형태로 바꿔 프로젝트에 '인간다운 감성'을 더해 줍니다.
humanize 필터를 사용하면 숫자를 단어로 변환하거나, 천 단위마다 콤마를 삽입하거나, 큰 숫자를 백만(million)·십억(billion) 단위로 축약해 표시할 수 있습니다. 지금부터 실제 예제를 통해 적용 방법을 단계별로 살펴보겠습니다.
1. 프로젝트 및 앱 생성
먼저 Django 프로젝트와 앱을 생성합니다.
django-admin startproject humanizeproj cd humanizeproj python manage.py startapp humanizeapp
2. URL 설정
프로젝트의 urls.py에 앱의 URL을 연결합니다.
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('', include('humanizeapp.urls')),
path('admin/', admin.site.urls),
]
이어서 앱의 urls.py를 작성해 home 뷰와 매핑합니다.
from django.urls import path
from . import views
urlpatterns = [
path('', views.home, name='home'),
]
3. 템플릿 설정
프로젝트 루트에 templates 폴더를 만들고 그 안에 비어 있는 home.html 파일을 생성한 뒤, settings.py의 TEMPLATES 설정에 경로를 등록합니다.
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
4. 앱 등록 및 humanize 활성화
settings.py의 INSTALLED_APPS에 생성한 앱과 함께 django.contrib.humanize를 반드시 추가해야 합니다. 이 항목이 누락되면 템플릿에서 humanize 필터를 사용할 수 없습니다.
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
# 아래 두 항목을 추가합니다
'humanizeapp', # 생성한 앱 이름
'django.contrib.humanize', # humanize 필터 활성화
]
5. 뷰 작성
앱의 views.py에 home 뷰를 추가해 home.html 템플릿을 렌더링합니다.
from django.shortcuts import render
def home(request):
return render(request, 'home.html')
6. 템플릿에서 humanize 필터 적용
home.html 상단에서 {% load humanize %}로 필터를 로드한 뒤, 아래와 같이 각 필터를 적용합니다.
<!DOCTYPE html>
<html>
<head>
<title>Humanize 예제</title>
</head>
<body>
{% load humanize %}
<h2>apnumber : 숫자를 단어로 변환</h2>
{{ '1'|apnumber }}<br>
{{ '2'|apnumber }}<br>
{{ '10'|apnumber }}<br>
<h2>intcomma : 천 단위 콤마 추가</h2>
{{ '1000'|intcomma }}<br>
{{ '200000'|intcomma }}<br>
{{ '10000000'|intcomma }}<br>
<h2>intword : million/billion 단위로 변환</h2>
{{ '1000000000'|intword }}<br>
{{ '20000000000'|intword }}<br>
{{ '10000000'|intword }}<br>
</body>
</html>
각 필터의 역할은 다음과 같습니다.
- apnumber : 1~9 사이의 숫자를 one, two처럼 영문 단어 형태로 변환합니다. 10 이상의 값은 그대로 출력됩니다.
- intcomma : 1000을 1,000처럼 세 자리마다 콤마를 넣어 가독성을 높입니다.
- intword : 1000000을 1.0 million처럼 큰 숫자를 백만·십억 단위의 축약형으로 바꿔 줍니다.
실행 결과
개발 서버(python manage.py runserver)를 실행한 뒤 브라우저에서 페이지를 열면 아래와 같이 각 필터가 적용된 결과를 확인할 수 있습니다.
이처럼 humanize 필터만 잘 활용해도 별도의 로직 없이 숫자 데이터를 훨씬 자연스럽고 읽기 쉽게 표현할 수 있습니다. 조회수, 통계, 금액 등을 표시하는 화면에 적극적으로 적용해 보세요.