Django 템플릿

Ryu Honggyu·2024년 8월 13일

Django

목록 보기
3/19
post-thumbnail

디자인 패턴

  • Django 는 MTV (Model-Template-View) 디자인 패턴을 사용함.

Model (모델)

  • 특징: 데이터베이스와 직접 상호작용하는 부분으로, 데이터의 구조와 데이터를 정의함.
    Django 의 ORM 으로 데이터베이스와 파이썬 간 매핑을 제공.
    이를 통해 개발자는 파이썬을 통해 DB 작업을 수행할 수 있음.

  • 역할: 애플리케이션의 데이터 구조를 정의하고, DB 작업 INSERT SELECT UPDATE DELETE 을 처리함.

  • ORM: Object-Relational Mapping. 객체 관계 매핑.
    객체 지향 언어로 호환되지 않는 유형의 시스템 간에 데이터를 변환하는 기술.

Template (템플릿)

  • 특징: 프론트엔드의 역할을 하는 HTML 파일로 사용자에게 보여지는 컨텐츠를 정의함.
    Django 템플릿 언어를 사용하여 동적인 컨텐츠를 쉽게 만들 수 있음.
    템플릿은 뷰에서 전달된 데이터를 표시하고, 고정된 HTML 컨텐츠와 동적 데이터를 결합하여 클라이언트에게 전달.

  • 역할: HTML, CSS, JavaScript 를 일컫음. 동적으로 생성된 데이터를 사용자에게 보여주는 역할을 함.

View (뷰)

  • 특징: 사용자의 요청을 처리하고, 필요한 데이터를 모델에서 가져와 템플릿에 전달하는 역할을 함.
    뷰는 비즈니스 로직을 처리하고, 어떤 데이터를 보여줄지, 어떤 템플릿을 사용할 지 등을 결정.
    Django 에서 뷰는 URL 요청을 받아서 처리하는 Python 함수 또는 클래스임.

  • 역할: 사용자의 요청(Request)에 따라 적절한 응답(Response)을 생성.
    DB 에서 데이터를 조회, 또는 특정 로직을 수행한 후 그 결과를 템플릿으로 전달하여 렌더링된 페이지를 반환함.


파이썬 파일

urls.py

  • URL과 뷰를 연결하는 역할.
  • 사용자가 특정 URL에 접근할 때 해당 URL에 맞는 뷰를 호출하도록 설정함.
from django.urls import path
from . import views

urlpatterns = [
    path('', views.index, name='index'),  # 기본 경로로 접근 시 index 뷰 호출
    path('about/', views.about, name='about'),  # /about/ 경로로 접근 시 about 뷰 호출
]

views.py

  • URL 요청에 따라 실행될 로직을 정의함.
  • DB 에서 데이터를 가져와서 템플릿에 전달함으로써 웹 페이지를 렌더링함.
from django.shortcuts import render

def index(request):
    context = {'message': 'Welcome to my website!'}
    return render(request, 'index.html', context)  # 'index.html' 템플릿을 렌더링하고 context를 전달함

def about(request):
    return render(request, 'about.html')  # 'about.html' 템플릿을 렌더링함

템플릿 (HTML)

  • HTML 로 작성.
  • 뷰에서 전달된 데이터를 표시하고 웹 페이지를 생성함.
  • 태그와 변수를 사용하여 동적인 컨텐츠를 삽입할 수 있음.
<!-- index.html -->
<!DOCTYPE html>

<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>Home Page</title>
</head>

<body>
    <h1>{{ message }}</h1>  <!-- 뷰에서 전달된 'message' 변수를 출력함 -->
</body>

</html>

Django Template Language (DTL)

  • Django의 템플릿 시스템에서 사용되는 템플릿 언어
  • HTML 문서에 동적 컨텐츠를 삽입할 수 있게 해줌.

변수

  • Django 템플릿에서 뷰로부터 전달된 데이터를 의미함.
  • 템플릿에서 {{ variable }} 형식으로 사용됨.

속성

  • HTML 태그의 특성을 정의하는 것임. Attribute.
  • 가령 <img src="image.jpg" alt="description"> 에서 srcalt 는 이미지 태그의 속성임.

필터

  • 변수에 적용할 수 있는 간단한 함수.
  • 템플릿에서 데이터를 처리하는데 사용됨.
  • 변수 뒤에 파이프 | 기호를 사용하여 적용함.
{{ name|lower }}  
{{ date|date:"Y-m-d" }}  

태그

  • 반복문 또는 논리, 조건문 등 특수한 기능을 수행.
  • 일부는 시작 ~ 종료 태그가 정해져있음.
  • 보통 {% tag %} 와 같은 형태를 띔.
# if 태그 사용법
{% if user.is_authenticated %}
    

인증된 고객의 경우

{% else %}

인증되지 않은 고객의 경우

{% endif %}

주석

  • 딴 언어에서 #, /* */ 와 같이 사용했던 그 주석이 맞음.
  • 실제로는 기능하지 않을, 기능 설명 등에 사용하는 주석.
  • 파이썬 주석은 #''' 로 주석처리할 텍스트를 감싸서 처리.
  • DTL 주석은 {# 로 시작하고 #} 로 끝남.
  • HTML 주석은 <!-- 로 시작하고 --> 로 끝남.

상속

  • 템플릿 상속을 통해 재사용 가능한 템플릿 구조를 만들 수 있음.
  • 공통 레이아웃을 정의한 부모 템플릿을 만든 후 이를 확장해 각기 다른 컨텐츠를 가진 자식 템플릿을 작성함.
<!-- base.html -->
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>{% block title %}My site{% endblock %}</title>
</head>
<body>
    <header>
        <h1>Site Header</h1>
    </header>
    <main>
        {% block content %}{% endblock %}
    </main>
    <footer>
        <p>Site Footer</p>
    </footer>
</body>
</html>

<!-- `child.html`은 `base.html`을 상속해 컨텐츠 블럭을 채움 -->
<!-- child.html -->
{% extends "base.html" %}

{% block title %}Home Page{% endblock %}

{% block content %}
    <p>Welcome back.</p>
{% endblock %}

템플릿 경로 설정

  • settings.py 는 템플릿 경로를 설정하기 위해 수정함.
  • Django 가 settings.py 를 확인해 템플릿 파일을 어디서 찾을지 판단함.

기본적으로 settings.py 파일의 TEMPLATES 설정 항목에서 템플릿 경로를 관리.
TEMPLATES는 리스트 형태로, 리스트 안에 여러 설정 옵션이 포함된 딕셔너리가 포함됨.
템플릿 경로는 DIRS 옵션을 통해 지정.

주요 옵션

  • DIRS: 템플릿 파일이 위치할 디렉토리 경로를 리스트 형태로 지정함. 이 옵션을 통해 Django는 지정된 경로에서 템플릿 파일을 검색함.
    가령 os.path.join(BASE_DIR, 'templates') 는 프로젝트의 기본 디렉토리 (BASE_DIR) 하위에 있는 templates 폴더를 지ㅓㅇ.

  • APP_DIRS: True 일 시 Django는 각 애플리케이션 내의 templates 디렉토리에서 템플릿을 자동으로 찾음.
    즉 각 앱 속의 templates 폴더들 모두를 검색 대상에 포함함.

  • BACKEND: Django가 사용할 템플릿 엔진을 지정. 기본값은 'django.template.backends.django.DjangoTemplates'임.

  • OPTIONS: 템플릿 렌더링 시 사용되는 추가 옵션을 지정할 수 있음.
    가령 context_processors는 템플릿에 자동으로 전달되는 변수나 함수를 정의하는데 사용됨.

profile
알고리즘 & 웹 & CS & AI

0개의 댓글