django

[Django] Template Language

peach_h 2023. 3. 15. 17:42
Django Template : 장고에서 데이터를 표현하는 도구, 표현에 관련된 로직
Django Template System : 데이터 표현을 제어하는 도구이자 표현에 관련된 로직을 담당

 

Django Template Language(DTL) : Django template에서 사용하는 built-in template system

조건, 반복, 변수 치환, 필터 등의 기능을 제공한다. ( 단, python 코드로 실행되는 것은 아님 )

프로그래밍적 로밍이 아니라, 프레젠테이션을 표현하기 위한 것

 

1. Variable ( 변수 )

변수명은 영어, 숫자, _ 구성 가능

밑줄로 시작 X 공백 X 구두점 X

.을 사용하여 변수 속성에 접근이 가능하다.

render()의 3번째 인자로 딕셔너리 형태로 넘겨준다.

딕셔너리에서 key에 해당하는 문자열이 template에서 사용 가능한 변수명이 됨 !

 

2. Filters

표시할 변수를 수정할 때 사용

chained가 가능, 일부 필터는 인자를 받기도 함

 

3. Tags

출력 텍스트를 만들거나, 반복문, 논리를 수행

일부 태그는 시작과 종료 태그 필요

예시 )

4. Comments : 주석

여러줄 주석은 {% comment %} {% endcomment %} 사용

 

실습하기

1. project와 app(myapp)을 생성 후, project / urls.py에 path 추가

from django.contrib import admin
from django.urls import path
from myapp  import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('home/', views.index),
    path('diner/', views.diner),
]

2. myapp / templates / myapp 에 diner.html 추가

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <p>{{ pick }}은 {{ pick|length }} 글자</p>
    <p>{{ foods|join:","}}</p>
    <p>메뉴판</p>
    <ul>
        {% for food in foods %}
        <li>{{ food }}</li>
        {% endfor %}
    </ul>

    <a href="/home/">뒤로</a>
</body>
</html>

3. app / views.py에 diner 함수 추가

from django.shortcuts import render
import random

# Create your views here.
def index(request):
    return render(request, 'myapp/index.html')
    
def diner(request):
    foods = ['햄버거','마두밥','곰탕']
    pick = random.choice(foods)
    context = {
        'pick':pick,
        'foods':foods,
        }
    
    return render(request, 'myapp/diner.html', context)

4. 실행결과

random 함수를 사용해서 새로고침 할 때 마다 pick이 바뀌는 것을 확인할 수 있음 

뒤로 <- 글씨를 누르면 /home/ 기본 화면으로 이동하게 연결해놨다.

 

index.html은 이렇게 구성해놨음

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <h1>Hi!</h1>
</body>
</html>

 

 

항상 만들기 순서 1. urls.py에 path추가 2. templates 파일 만들기 3. views에서 templates 파일 불러올 함수 만들기

파일 순서 항상 조심하기 . . !!