∟Framework/∟Django

Django - Template

최 수빈 2025. 1. 9. 00:08

views.py작성

 

ulrs.py작성

 

앱 내부에 templates 폴더 생성(+HTML 템플릿 작성)
VScode에서 ! + Tab 기본적인 HTML파일 구조가 생성되는 자동완성 지원

 

settings.py 확인(TEMPLATES 설정에서 DIRS 및 APP_DIRS 경로 확인

 

/index/
/index2/
/users/

 

 

 

 

 

Django 요청과 응답 흐름

 

HttpRequest  URLs → View → Template → View → HttpResponse

 

 

 

 

Django에서 클라이언트 요청을 처리하고 응답을 반환하는 흐름

1. 요청(Request)

• 클라이언트(브라우저)에서 특정 URL로 요청을 보냄

• 예: http://127.0.0.1:8000/index/

 

 

2. URL 처리 (urls.py)

• Django는 요청받은 URL을 기반으로 urls.py에서 URL 패턴과 View를 매핑

• URL 패턴은 path()로 정의, 요청을 특정 View로 전달

from django.urls import path
urlpatterns = [
    path('index/', views.index),
]

 /index/ URL로 요청이 들어오면 views.index 함수가 호출

 

 

3. View 처리 (views.py)

• views.py는 요청을 처리하고 적절한 응답을 반환

• 응답의 두 가지 방식:

  • 직접 응답 생성: HttpResponse를 반환
  • 템플릿 렌더링: HTML 파일을 반환

 

(1) 직접 응답

from django.http import HttpResponse

def index(request):
    response = HttpResponse("<h1>Hello, Django!</h1>")
    return response

간단한 응답에 적합, HTML이 길어질 경우 유지보수가 어려움

 

 

(2) 템플릿 렌더링

from django.shortcuts import render
def index2(request):
    return render(request, "index2.html")

템플릿 파일을 활용하여 구조적이고 재사용 가능한 HTML을 반환

 

 

4. 템플릿 처리

• render() 함수는 지정한 HTML 템플릿 파일을 읽고 렌더링

• HTML 템플릿은 보통 templates 디렉토리에 저장

 

articles/templates/index.html

→ settings.py의 TEMPLATES 설정에서 이 디렉토리를 읽도록 설정되어 있어야 함

 

템플릿 예

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <title>Back to the ZERO</title>
    </head>
    <body>
        <h1>My First Django Project</h1>
        <p>Please back to the zero!</p>
    </body>
</html>

 

 

5. 응답(Response)

• Django는 View에서 생성된 응답(HttpResponse 또는 렌더링된 템플릿)을 클라이언트에 반환

• 클라이언트는 이 응답을 브라우저에 렌더링하여 화면에 표시

 

 

 

 

*Trailing Slash

• Django에서는 URL 패턴을 정의할 때 Trailing Slash(/)를 붙이는 것을 권장

• path("index/")는 /index/ URL에만 매칭되며, index로 들어오면 404 에러를 반환

• 이는 Django의 URL 정규화 방식이며, RESTful API 등을 제외하고 일반적으로 /를 사용하는 것이 표준

 

 

*render() 함수

template_name과 context를 받아 HTML을 반환하는 도우미 함수

def render(
    request, template_name, context=None, content_type=None, status=None, using=None
):
    """
    Return an HttpResponse whose content is filled with the result of calling
    django.template.loader.render_to_string() with the passed arguments.
    """
    content = loader.render_to_string(template_name, context, request, using=using)
    return HttpResponse(content, content_type, status)

 

• request: 클라이언트 요청 객체

• template_name: 렌더링할 템플릿 파일 경로

• context: 템플릿에 전달할 데이터(선택 사항)

• 반환 값: 렌더링된 HTML 응답(HttpResponse)

 

 

*HTML을 템플릿으로 사용하기

 

users/ 경로로 요청을 처리하는 코드 작성

  1. URL 패턴 정의 (urls.py)
from django.urls import path
from articles import views
urlpatterns = [
    path('users/', views.users),
]
  1. View 작성 (views.py)
from django.shortcuts import render
from django.http import HttpResponse

def users(request):
    return render(request, "users.html")
  1. HTML 템플릿 작성 (templates/users.html)
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Users Page</title>
</head>
<body>
    <h1>HEY THERE</h1>
    <p>USERS</p>
</body>
</html>

 

'∟Framework > ∟Django' 카테고리의 다른 글

Django - Design Patterns  (0) 2025.01.08
Django - Request & Response  (1) 2025.01.07
Django - Client↔Server  (2) 2025.01.07
Django - App  (1) 2025.01.06
Django - Project  (3) 2025.01.03