Menu
CoddyTech

템플릿 부분

Coddy Django 여정의 JSON API 섹션에 포함된 레슨. 19개 중 14번째.

스크립트가 항상 JSON을 원하는 것은 아닙니다. 작업을 추가한 후 서버에 해당 작업의 미리 준비된 <li>를 요청해 목록에 넣을 수 있습니다. 템플릿은 이미 해당 행을 렌더링하므로 서버는 이를 재사용해야 합니다.

Django 6.0에는 템플릿 부분이 추가되었습니다. 템플릿의 이름이 지정된 일부로, 단독으로 렌더링할 수도 있습니다. {% partialdef %}로 감싸세요. inline을 지정하면 루프가 반복될 때마다 해당 위치에도 렌더링됩니다. 뷰는 템플릿 이름, #, 부분 템플릿의 이름을 사용해 그 부분만 렌더링합니다.

{% partialdef cart-total inline %}
    <strong>{{ cart.total }}</strong>
{% endpartialdef %}
return render(request, "shop/cart.html#cart-total", {"cart": cart})

컨텍스트에는 여기서 cart처럼 해당 부분이 읽는 값이 포함되어야 합니다. 페이지와 부분 템플릿은 하나의 마크업을 공유하므로 서로 달라질 수 없습니다.

challenge icon

챌린지

중급

/tasks/의 행 하나를 별도로 제공하세요:

  • list.html에서 <li>를 task-row라는 부분 템플릿으로 만들되, 모든 작업에 대해 계속 렌더링하세요.
  • 부분 템플릿만 렌더링하고 작업이 없으면 404를 반환하는 뷰 task_row(request, pk)를 만드세요.
  • task_row라는 이름의 경로 "tasks/<int:pk>/row/"를 추가하세요.

Run을 누른 다음 /tasks/1/row/를 여세요. 행 하나가 표시됩니다.

직접 해보기

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title>All tasks</title>
</head>
<body>
    <h1>All tasks</h1>
    <ul id="tasks">
        {% for task in tasks %}
            <li id="task-{{ task.id }}">{{ task.title }}{% if task.done %} (done){% endif %}</li>
        {% endfor %}
    </ul>
</body>
</html>
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

JSON API의 모든 레슨

직접 연습해 보세요: Django 플레이그라운드