첫 번째 템플릿
Coddy Django 여정의 Django 기초 섹션에 포함된 레슨. 23개 중 11번째.
홈페이지의 HTML이 Python 문자열에 담기에는 너무 길어졌습니다. Django는 HTML을 템플릿에 저장합니다. 템플릿은 뷰가 렌더링하는 파일입니다. 상점의 장바구니 뷰는 다음과 같습니다.
from django.shortcuts import render
def cart(request):
return render(request, "shop/cart.html")render()는 템플릿을 읽고 내용을 채운 뒤 HttpResponse를 반환합니다. Django는 settings.py의 INSTALLED_APPS에 등록된 각 앱의 templates/ 폴더에서 "shop/cart.html"을 찾습니다. 따라서 다음 두 가지가 올바르게 설정되어야 합니다.
- 앱이
INSTALLED_APPS에 등록되어 있어야 합니다. - 파일이
shop/templates/shop/cart.html에 있어야 합니다.shop을 반복해서 넣으면 다른 앱의cart.html과 구분할 수 있습니다.
둘 중 하나라도 빠지면 페이지에 TemplateDoesNotExist 오류가 발생하고 Django가 검색한 모든 폴더가 표시됩니다. home.html의 {% url %} 태그는 About 링크를 만듭니다. 이에 대해서는 다음 강의에서 설명합니다.
챌린지
쉬움홈 페이지의 HTML은 menu/templates/menu/home.html에 준비되어 있습니다. home 뷰에서 이를 렌더링하도록 만드세요.
mysite/settings.py에서INSTALLED_APPS에"menu"를 추가하세요. Django는 여기에 등록된 앱에서만 템플릿을 찾습니다.menu/views.py에서django.shortcuts로부터render를 가져오고,home뷰의return줄을 바꿔"menu/home.html"을 렌더링하세요.
실행을 누르세요. 사이트의 제목 표시줄에 Corner Café가 표시됩니다.
직접 해보기
from django.http import Http404, HttpResponse
from django.urls import reverse
DRINKS = {
"espresso": {"name": "Espresso", "price": 2.5, "description": "A short, strong shot of coffee."},
"latte": {"name": "Latte", "price": 3.5, "description": "Espresso with lots of steamed milk."},
"flat-white": {"name": "Flat White", "price": 3.75, "description": "Espresso with a thin layer of silky milk."},
"hot-chocolate": {"name": "Hot Chocolate", "price": 3, "description": "Dark chocolate melted into warm milk."},
}
def home(request):
about_url = reverse("menu:about")
return HttpResponse(
"<h1>Welcome to Corner Café</h1><p>Fresh coffee and cake every day.</p>"
f'<a href="{about_url}">About us</a>'
)
def about(request):
return HttpResponse("Corner Café opened in 2026.")
def hours(request):
return HttpResponse("Open every day from 8:00 to 18:00.")
def contact(request):
return HttpResponse("Write to us at hello@cornercafe.example.")
def table(request, number):
return HttpResponse(f"<h1>Table {number}</h1>")
def drink(request, slug):
if slug not in DRINKS:
raise Http404(f"No drink called {slug}")
item = DRINKS[slug]
return HttpResponse(f"<h1>{item['name']}</h1><p>{item['description']}</p>")
def order(request):
size = request.GET.get("size", "medium")
if size not in ["small", "medium", "large"]:
size = "medium"
return HttpResponse(f"You ordered a {size} coffee.")
Django 기초의 모든 레슨
직접 연습해 보세요: Django 플레이그라운드