Django 장고 디자인 패턴, Django Template System

Django 디자인 패턴
장고의 설계 철학에도 디자인 패턴이 적용되어 있는데, 이걸 MTV pattern 이라고 한다.
Django의 MTV Pattern

Model
MVC에서의 Model
데이터와 관련된 로직을 처리
→ 데이터 구조 정의, 데이터베이스 기록 관리
Template
MVC에서의 View
레이아웃과 화면상의 로직을 처리
→즉, UI와 레이아웃을 다룬다.
View
MVC에서의 Controller
메인 비지니스 로직을 담당
클라이언트의 요청에 대해 처리를 분기하는 역할을 한다.
DB도 조회하고 외부로 요청
응답을 만들어서 클라이언트에게 전달
Django Template
요청과 응답
URL
urls.py - 어떤 url 패턴으로 들어오면 어디의 뷰로 보낼까를 설정해 주는 곳
urlpatterns 내부를 보면 “admin/”, admin.site.urls가 있는데,
admin 패턴으로 들어오면 admin.site.urls 뷰로 보낸다 이다.
urls.py
from django.contrib import admin
from django.urls import path
from articles import views
urlpatterns = [
path('admin/', admin.site.urls),
path('index/', views.index),
path('users/', views.users)
]
뷰를 작성하는 방법
함수형 뷰
클래스형 뷰
View
url에서 보낸 요청을 처리하는 index.view 함수
http 요청을 받고, http 응답을 반환
views.py
from django.shortcuts import render
# Create your views here.
def index(request):
return render(request, 'index.html')
def users(request):
return render(request, 'users.html')
view 동작

여기서 index.html은 만든적이 없는데..?
templates폴더를 만들고 그안에 index.html 생성
/firstProject/articles/templates/index.html

request가 들어오면 url 찍고 url에서 패턴 일치하는거 찾아서 일치하는 view 넘기고
그 요청을 view 함수가 받아서 처리 -> 이 처리를 template을 가져와서 렌더링 해서 return
Django Template System
template 기본 경로 - app_name/templates
Django template은 내가 원하는 데이터를 html 파일에 넣는 것,
즉 데이터 표현을 휘한 다양한 도구를 제공한다.
Django Template Language (DTL)
django template 안에서만 사용하는 문법
파이썬과 문법은 비슷하지만 파이썬이 동작하는 것이 아닌 DTL이 동작하는 것이다.
DTL 문법
1. 변수 (Variable)
{{ variable }}
view에서 context로 넘긴 데이터를 접근할 수 있다.

.연산자를 사용하여 변수의 속성값에 접근이 가능하다.
view에서 template로 데이터를 넘기는 행위는 render()의 세번째 인자인 context에 넣는다.
context는 dict 형태로 넘겨진 데이터 중 key값이 template에서 사용 가능한 변수가 된다.
DTL에서 {key:value} 형태로 넘겨주고, 이때 넘겨진 context에 접근할 때 변수를 쓴다.
이때 변수는 key값이 변수가 되고, key값을 쓰게 되면 html파일에서는
value값으로 바꿔주고 이걸 사용한다.
2. 필터 (Filters)
{{ first_name|filter }}
변수에 어떠한 작업을 추가적으로 더해 수정하고 싶을 때 사용
예시 : view에서 넘겨준 데이터는 Hello이지만, 보여줄때는 소문자로 나타내고
싶을때는,{{ first_name|lower }}사용
3. 태그 (Tags)
{% tag %}반복 또는 논리를 수행하여 제어 흐름을 만들거나 특수한 기능을 수행
일부 태그는 시작태그와 종료태그가 있다.
{% if ~ %} {% endif %}
4. 주석 (Comments)
{# 한 줄 주석 #} {% comment %} 여러줄 주석 {% endcomment %}




