첫 번째 템플릿
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 뷰에서 이 파일을 렌더링하고 Django가 이 파일을 찾을 수 있도록 하세요.
Run을 누르세요. 사이트의 제목 표시줄에 Corner Café가 표시됩니다. 노란색 TemplateDoesNotExist 페이지가 나타나면 Django가 검색한 폴더를 확인하세요.
직접 해보기
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 플레이그라운드