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 뷰에서 이 파일을 렌더링하고 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 플레이그라운드