Skip to main content

Command Palette

Search for a command to run...

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

Updated
2 min read
Django 장고 디자인 패턴,  Django Template System

Django 디자인 패턴

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

Django의 MTV Pattern

  • Model

    • MVC에서의 Model

    • 데이터와 관련된 로직을 처리

      → 데이터 구조 정의, 데이터베이스 기록 관리

  • Template

    • MVC에서의 View

    • 레이아웃과 화면상의 로직을 처리

      →즉, UI와 레이아웃을 다룬다.

  • View

    • MVC에서의 Controller

    • 메인 비지니스 로직을 담당

    • 클라이언트의 요청에 대해 처리를 분기하는 역할을 한다.

      • DB도 조회하고 외부로 요청

      • 응답을 만들어서 클라이언트에게 전달


Django Template

요청과 응답

  1. 요청(Request)이 들어오면

  2. URL(urls.py) 처리

  3. View(views.py) 처리

  4. Template(html) 처리

  5. 응답(Response) 전달

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)
]

뷰를 작성하는 방법

  1. 함수형 뷰

  2. 클래스형 뷰

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 }}⁠사용

  • filter 60종 공식문서

3. 태그 (Tags)

  • {% tag %}

  • 반복 또는 논리를 수행하여 제어 흐름을 만들거나 특수한 기능을 수행

  • 일부 태그는 시작태그와 종료태그가 있다.
    {% if ~ %} {% endif %}

4. 주석 (Comments)

  • {# 한 줄 주석 #} {% comment %} 여러줄 주석 {% endcomment %}
25 views
P
Park2y ago

역시 정리의 장인 멋있습니다!!

D
Dayeon2y ago

?

1

More from this blog

s3사용 및 s3:PutBucketPolicy 권한 오류

1. S3 생성 중 정책 생성 페이지에서 s3:PutBucketPolicy 권한이 없어 오류 발생 IAM 사용이 아닌 루트 사용자 버전으로 설명 AWS IAM 콘솔 → 정책 → AdministratorAccess⁠검색→ 정책이 나타나면 사용자에 연결→ 없다면 새로운 정책 추가 없으므로 AdministratorAccess 생성 정책 생성 버튼 클릭 → JSON 탭 선택 후 아래 코드 입력 → 생성 { "Version": "2012-10-1...

Mar 12, 20252 min read9
s3사용 및 s3:PutBucketPolicy 권한 오류

챗봇과 사용자의 대화 내용이 길어질수록 llm 호출 시 토큰 수가 증가하여 응답 시간이 지연되는 문제가 발생

https://youtu.be/5soSQgVHGEA OpenAI API를 이용한 챗봇을 만들면서 대화가 길어질수록 LLM 호출 시 토큰 수 증가로 응답 시간이길어지는 문제가 발생 문제분석 여기서 생각하는 문제는 db 조회의 부하 처음 챗봇에게 부여하는 역할이 너무 긴데, 이걸 매 API 호출마다 전송함 대화 흐름을 기억하기 위해 챗봇-유저 간 대화 내용을 모두 DB에 저장한 다음 그대로 API 호출 마다 LLM에 전달함 → 모든 대화 ...

Jan 16, 20253 min read122
챗봇과 사용자의 대화 내용이 길어질수록 llm 호출 시 토큰 수가 증가하여 응답 시간이 지연되는 문제가 발생

dayeon's blog

124 posts