Django에서 동적 뷰와 템플릿 구축

Django는 동적 웹 애플리케이션을 쉽게 빌드할 수 있는 강력한 프레임워크입니다. 이 글에서는 Django에서 동적 뷰와 템플릿을 빌드하는 방법을 살펴보겠습니다. 기본 개념부터 고급 기술까지 살펴보겠습니다. 뷰에서 템플릿으로 데이터를 전달하는 방법과 템플릿 태그를 사용하여 해당 데이터를 기반으로 콘텐츠를 동적으로 생성하는 방법을 다룹니다.

Django의 뷰란 무엇인가?

Django에서 뷰는 웹 요청을 받고 웹 응답을 반환하는 Python 함수 또는 클래스 기반 구성 요소입니다. 응답은 HTML 페이지, JSON 객체 또는 다른 유형의 콘텐츠일 수 있습니다. 뷰를 사용하면 사용자의 요청에 따라 동적으로 콘텐츠를 생성할 수 있습니다.

간단한 뷰 만들기

Django에서 뷰를 만들려면 Django 앱의 views.py 파일에서 함수를 정의해야 합니다. 함수는 HTTP 요청을 받고 HTTP 응답을 반환합니다. 예를 들어:

from django.shortcuts import render

def home(request):
    return render(request, 'home.html')

이 간단한 뷰는 "home.html" 템플릿을 렌더링합니다. 하지만 뷰에서 템플릿으로 데이터를 전달하여 이를 더 동적으로 만들 수 있습니다.

템플릿에 데이터 전달

뷰에서 템플릿으로 데이터를 전달하려면 렌더 함수를 호출할 때 컨텍스트 인수에서 사전을 사용할 수 있습니다. 예를 들어, "home" 뷰를 수정하여 동적 메시지를 템플릿에 전달해 보겠습니다.

def home(request):
    context = {
        'message': 'Welcome to my website!'
    }
    return render(request, 'home.html', context)

이제 "home.html" 템플릿에서 `message` 변수에 액세스할 수 있습니다.

<h1>{{ message }}</h1>

이렇게 하면 뷰에서 전달된 메시지인 "내 웹사이트에 오신 것을 환영합니다!"가 표시됩니다.

동적 콘텐츠에 템플릿 태그 사용

Django 템플릿은 HTML에서 동적 콘텐츠를 생성하는 데 도움이 되는 강력한 템플릿 태그를 지원합니다. 일반적인 템플릿 태그는 다음과 같습니다.

  • 조건문의 경우 {% if %}... {% endif %}.
  • {% for %}... {% endfor %}는 데이터를 반복합니다.
  • HTML에 동적 값을 삽입하기 위한 {{ variable }}.

If 문 사용

특정 조건이 참일 때만 나타나는 동적 메시지를 추가해 보겠습니다. 조건을 전달하도록 "home" 뷰를 수정합니다.

def home(request):
    context = {
        'message': 'Welcome to my website!',
        'user_logged_in': True
    }
    return render(request, 'home.html', context)

템플릿에서 if 명령문을 사용하면 사용자가 로그인한 경우에만 환영 메시지를 표시할 수 있습니다.

{% if user_logged_in %}
    <p>You are logged in!</p>
{% else %}
    <p>Please log in to access more features.</p>
{% endif %}

데이터 루핑

이제, 항목 목록을 템플릿에 전달하고 for 루프를 사용하여 표시해 보겠습니다. 먼저 뷰를 수정합니다.

def home(request):
    context = {
        'message': 'Welcome to my website!',
        'items': ['Item 1', 'Item 2', 'Item 3']
    }
    return render(request, 'home.html', context)

이제 템플릿에서 for 루프를 사용하여 각 항목을 표시합니다.

<ul>
{% for item in items %}
    <li>{{ item }}</li>
{% endfor %}
</ul>

이렇게 하면 항목 1, 항목 2, 항목 3의 순서 없는 목록이 렌더링됩니다.

재사용 가능한 레이아웃을 위한 템플릿 상속

Django에서는 템플릿 상속을 사용하여 여러 페이지에서 재사용할 수 있는 공통 레이아웃을 만들 수 있습니다. 예를 들어 HTML 페이지의 구조를 포함하는 기본 템플릿을 만들어 보겠습니다.

<!-- base.html -->
<html>
    <head>
        <title>My Website</title>
    </head>
    <body>
        <header>
            <h1>My Website</h1>
        </header>
        
        <main>
            {% block content %}{% endblock %}
        </main>

        <footer>
            <p>Footer content here</p>
        </footer>
    </body>
</html>

이제 "home.html" 템플릿에서 기본 템플릿을 확장하고 콘텐츠 블록을 정의합니다.

<!-- home.html -->
{% extends 'base.html' %}

{% block content %}
    <h2>Welcome to the Home Page</h2>
    <p>This is the dynamic content of the home page.</p>
{% endblock %}

렌더링 시, "home.html" 콘텐츠가 기본 템플릿의 {% block content %}{% endblock %} 섹션에 삽입됩니다.

결론

Django에서 동적 뷰와 템플릿을 빌드하는 방법을 배웠습니다. 뷰에서 템플릿으로 데이터를 전달하고 Django의 강력한 템플릿 태그를 사용하면 풍부하고 대화형 웹 페이지를 만들 수 있습니다. 또한 템플릿 상속을 통해 애플리케이션 전체에서 공통 레이아웃을 재사용하여 코드를 더 유지 관리할 수 있습니다.

이러한 개념을 이해하면 더욱 복잡한 Django 애플리케이션을 구축하고 프레임워크의 모든 기능을 활용할 수 있습니다.