본문 바로가기
WEB/Django

[Django] template language

by snow_white 2022. 4. 10.

1. 템플릿 태그

템플릿 태그는 기존 Python에 있는 syntex에 해당하는 부분이다.

if, else, for 구문과 같은 것을 사용할 수 있고, 추가로 확장 syntex를 (extends, block, include, etc) 사용할 수 있다.

중괄호 ( { } )와 퍼센트 ( % )를 조합하여 사용한다.

{% 문법 %}

2. 템플릿 변수

템플릿 변수는 render 함수나 JsonResponse 함수로 데이터를 전달 받아 html 파일 안에서 호출되는 파이썬의 딕셔너리형 변수이다. 중괄호 2개를 사용한다.

{{ 변수 }}

3. 템플릿 필터

템플릿 필터는 변수 값을 변환시켜 출력하기 위한 옵션이다. 템플릿 변수 옆에 파이프( | )를 사용한다.

{{ 변수 | 옵션 }}

▫️ main > urls.py에 sample 경로 추가

from main.views import index, test, sample
from a.views import indexA
from b.views import indexB
from c.views import indexC
from d.views import indexD

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', index),
    path('sample', sample), # main의 views.py 파일에 sample 함수로 매핑
    path('testtest/', test), # main의 views.py 파일에 test 함수로 매핑
    path('aa/', indexA),
    path('bb/', indexB),
    path('cc/', indexC),
    path('dd/', indexD),
]

▫️ main > views.py에 sample 함수 추가

from django.shortcuts import render, redirect
from django.http import HttpResponse, JsonResponse

def index(request):
    return render(request, 'index.html')

def test(request):
    d = {'name':'je', 'age':24}
    return JsonResponse(d)

def sample(request):
    d = {'name':'je', 'age':24}
    l = {100, 200, 300}
    return render(request, 'sample.html', {'value':l}) 
# templates에서 value라는 이름으로 l을 사용할 것임!

▫️ main > templates > sample.html 파일 생성

<h1>
    {{ value }} <!-- value는 views.py의 l을 value라고 정의해놓았음 -->
</h1>
<p>
    {{ value.2 }} <!-- 멤버변수.인덱스 -->
</p>

▫️ url 경로에 /sample 요청하면 views.py의 l을 출력해줌!

▫️ 딕셔너리 형식으로 값 보내고 출력하기

from django.shortcuts import render, redirect
from django.http import HttpResponse, JsonResponse
from .models import Notice

def index(request):
    return render(request, 'index.html')

def test(request):
    d = {'name':'je', 'age':24}
    return JsonResponse(d)

def sample(request):
    d = Notice.objects.all()
    return render(request, 'sample.html', {'value':d})

▫️ for 구문

{% for i in range() %}

{% endfor %}

    <h1>{{value}}</h1>
    <p>{{value.1.title}}</p>
    
    {% for i in value %}
    <h1>{{forloop.counter}} - {{i.title}}</h1>
    <!-- counter0 : 인덱스 0부터 시작 -->
    <!-- revcounter0 : 인덱스 역순, 마지막 인덱스가 0이 되게 -->
    <p>{{i.contents}}</p>
    
    {% endfor %}

 

▫️ if, else 구문

{% if 조건 %}

{% elif 조건 %}

{% else 조건 %}

{% endif %}

    <h1>{{value}}</h1>
    <p>{{value.1.title}}</p>
    
    {% for i in value %}
    <h1>{{forloop.counter}} - {{i.title}}</h1>
    <!-- counter0 : 인덱스 0부터 시작 -->
    <!-- revcounter0 : 인덱스 역순, 마지막 인덱스가 0이 되게 -->
    <p>{{i.contents}}</p>
    <p>{{i.viewCount}}</p>
    
    {% if i.viewCount > 7 %}
    <p>뷰 수가 많습니다.</p>
    {% elif i.viewCount > 5 %}
    <p>콘텐츠가 반응을 보이고 있습니다.</p>
    {% else %}
    <p>콘텐츠 홍보를 더 해주세요..</p>
    {% endif %}
   
    {% endfor %}

 

 

  • 템플릿 코드로 변수 생성
    <h1>{{value}}</h1>
    <p>{{value.1.title}}</p>
        
    {% for i in value %}
        <h1>{{forloop.counter}} - {{i.title}}</h1>
        <p>{{i.contents}}</p>
        <p>{{i.viewCount}}</p>
        
        {% if i.viewCount > 7 %}
            <p>뷰 수가 많습니다.</p>
        {% elif i.viewCount > 5 %}
            <p>콘텐츠가 반응을 보이고 있습니다.</p>
        {% else %}
            <p>콘텐츠 홍보를 더 해주세요..</p>
        {% endif %}
        
    {% endfor %}
    
    {% with value='hello world' %}
        <h1>{{value}}</h1>
    {% endwith %}
    
  • with 변수 = 값

<h1>{{value}}</h1>
<p>{{value.1.title}}</p>
    
{% for i in value %}
    <h1>{{forloop.counter}} - {{i.title}}</h1>
    <p>{{i.contents}}</p>
    <p>{{i.viewCount}}</p>
    
    {% if i.viewCount > 7 %}
        <p>뷰 수가 많습니다.</p>
    {% elif i.viewCount > 5 %}
        <p>콘텐츠가 반응을 보이고 있습니다.</p>
    {% else %}
        <p>콘텐츠 홍보를 더 해주세요..</p>
    {% endif %}
    
{% endfor %}

{% with value='hello world' %}
    <h1>{{value}}</h1>
{% endwith %}
  • load 구문

사용자가 템플릿 코드 정의할 수 있음! 정의한 태그를 불러오는 역할

 

  • 주석
    • 한 줄 주석 {# hello world #}
    • 주석여러 줄 주석 {% content %} {% endcontent %}
{# hello world #}
{% content %}
<p>hello world!!!!!!!!!</p>
{% endcontent %}

'WEB > Django' 카테고리의 다른 글

[Django] url 개선  (0) 2022.04.10
[Django] ORM, Django Shell, QuerySet  (0) 2022.04.10
[Django] Django 구조와 MTV  (0) 2022.04.10
[Django] admin 페이지에 Notice 등록하기  (0) 2022.04.10
[Django] 프로젝트 파일 속성값  (0) 2022.04.10

댓글