Menu
CoddyTech

첫 번째 템플릿

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 링크를 만듭니다. 이에 대해서는 다음 강의에서 설명합니다.

challenge icon

챌린지

쉬움

홈 페이지의 HTML은 menu/templates/menu/home.html에 준비되어 있습니다. home 뷰에서 이를 렌더링하도록 만드세요.

  1. mysite/settings.py에서 INSTALLED_APPS에 "menu"를 추가하세요. Django는 여기에 등록된 앱에서만 템플릿을 찾습니다.
  2. 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 플레이그라운드