🎯 Django로 구구단 페이지 만들기
이 문서는 Django 프레임워크를 활용하여 구구단(99단) 페이지를 만드는 전체 과정을 스크립트 흐름대로 정리한 튜토리얼입니다. URLConf, Template, View, Redirect, Template Filter 등을 활용하며, 실무와 가까운 예외처리까지 포함합니다.
1️⃣ 프로젝트 개요
- 목표: URL 요청에 따라 해당 구구단을 출력하는 페이지 구현
- 기술 스택: Django, Python, HTML Template
- 기능 요약:
- URL로 단 수를 받아 동적 응답
- 템플릿 렌더링 사용
- 잘못된 입력 시 리다이렉트 처리
2️⃣ View 함수 구현
from django.shortcuts import render, redirect
def gugudan_view(request, dan):
if dan < 2:
return redirect('/99/2') # 2단 미만이면 강제 리다이렉트
results = [dan * i for i in range(1, 10)] # 리스트 컴프리헨션 사용
context = {
'dan': dan,
'results': results,
}
return render(request, '99.html', context)
🔍 설명
- dan < 2인 경우 /99/2로 리다이렉트 (302 Found 응답)
- 1~9까지 반복하며 dan * i 계산 결과 리스트 생성
- dan과 results를 템플릿에 넘김
3️⃣ URLConf 설정
# urls.py
from django.urls import path
from .views import gugudan_view
urlpatterns = [
path('99/<int:dan>/', gugudan_view),
]
🔍 설명
- <int:dan>: URL 경로에서 정수형 파라미터 dan 추출
- 예: /99/3/ → dan = 3
4️⃣ HTML 템플릿 작성 (templates/99.html)
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<title>{{ dan }}단</title>
</head>
<body>
<h1>{{ dan }}단</h1>
<ul>
{% for result in results %}
<li>{{ dan }} x {{ forloop.counter }} = {{ result }}</li>
{% endfor %}
</ul>
</body>
</html>
🔍 설명
- {{ dan }}: 현재 단 수
- forloop.counter: 1부터 시작하는 반복 인덱스
- {{ result }}: 각 곱셈 결과
5️⃣ 예외처리 및 리다이렉트 동작 확인
- /99/0, /99/1 요청 시 /99/2로 리다이렉트 → 302 Found
- /99/3 이상 요청 시 정상 응답 (200 OK)
6️⃣ 대안 구현 방법 (with_ratio, make_list 등)
Django Template에서는 {{ dan * i }}와 같은 직접 곱셈 연산이 불가합니다. 대안으로 widthratio, add filter, make_list 등의 필터를 활용합니다.
<!-- widthratio 필터: (a / b) * c -->
{% widthratio dan 1 i %} → 결과: dan * i
<!-- make_list 활용 예 (추천하지 않음) -->
{% for i in "123456789"|make_list %}
<li>{{ dan }} x {{ i }} = {% widthratio dan 1 i %}</li>
{% endfor %}
7️⃣ 최종 정리
항목 설명
View 함수 | 입력 단 처리, 리스트 컴프리헨션 생성, 리다이렉트 처리 포함 |
Template | {{ dan }}, forloop.counter, {{ result }} 활용 |
URLConf | path('99/<int:dan>/') 정수 단수 매핑 |
리다이렉트 처리 | dan < 2 조건 시 /99/2로 이동 |
✅ 보너스 팁
- 실전에서는 구구단 페이지 외에도 동적 목록 출력, 입력 값에 따른 분기 처리 등에 응용 가능
- list comprehension은 HTML 템플릿에서 표현이 불가하므로 반드시 Python 내에서 처리
- Django Template 문법의 한계점은 필터(widthratio, add)로 보완
👉 다음 단계: 구구단을 Ajax + Django API로 동적으로 출력해보는 실습으로 확장할 수 있습니다!
'Django' 카테고리의 다른 글
Chapter 2-6 Django ORM 요약본 – QuerySet 기초 활용법 정리 (0) | 2025.04.30 |
---|---|
Chapter 2-4 Django Admin 기능 완전 정복 요약본 (0) | 2025.04.30 |
Chapter 1-9 Django 템플릿 구성 파일 개발 & 방안 (0) | 2025.04.29 |
Chapter 1-7 Django - 가짜 데이터베이스로 웹 페이지 만들기 튜토리얼 (0) | 2025.04.29 |
Chapter 1-6 Django 기본 HTTP 응답 만들기 튜토리얼 (0) | 2025.04.29 |