Django Template Language ๋? ๐
ณ๐๐
ป
1. Django Template Language ์ ์
- Django Template Language(DTL)๋ Django์์ HTML์ ๋์ ์ผ๋ก ์์ฑํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ํ
ํ๋ฆฟ ์์ง์
๋๋ค
DTL์ ์ฌ์ฉํ๋ฉด ๋ฐฑ์๋์์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌ๋ฐ์ ์ฌ์ฉ์์๊ฒ ๋ ๋๋ง ํ ์ ์์ด์
2. ๊ธฐ๋ณธ ๋ฌธ๋ฒ
1. ๋ณ์ ์ถ๋ ฅ
- ํ
ํ๋ฆฟ์์ Python ๋ณ์๋ฅผ ์ถ๋ ฅํ๋ ค๋ฉด `{{ variable_name }}` ์ ์ฌ์ฉํด์ค๋๋ค
<p>์๋
ํ์ธ์, {{ name }}๋!</p>
return render(request, 'index.html', {'name': 'Alice'})
<p>์๋
ํ์ธ์, Alice๋!</p>
2. ํํฐ (Filters)
- ๋ณ์์ ๋ฐ์ดํฐ๋ฅผ ๋ณํํ๊ธฐ ์ํด ํํฐ๋ฅผ ์ฌ์ฉํฉ๋๋ค
- ๊ตฌ๋ฌธ: `{{ variable | filter_name }}`
- ์ฌ๋ฌ ํํฐ๋ฅผ ์ฒด์ธ์ฒ๋ผ ์ฐ๊ฒฐ ๊ฐ๋ฅํด์
ํํฐ |
์ค๋ช
|
์์ |
`lower` |
๋ฌธ์์ด์ ์๋ฌธ์๋ก ๋ณํ |
`{{ name | lower }}` |
`upper` |
๋ฌธ์์ด์ ๋๋ฌธ์๋ก ๋ณํ |
`{{ name | upper }}` |
`date` |
๋ ์ง ํฌ๋งท ์ง์ |
`{{ date | date: "Y-m-d" }}` |
`default` |
๊ฐ์ด ์์ ๊ฒฝ์ฐ ๊ธฐ๋ณธ๊ฐ ์ง์ |
`{{ age | default: "๋ฏธ์
๋ ฅ" }}` |
`length` |
๊ธธ์ด ๋ฐํ |
`{{ items | length }}` |
<p>{{ name|upper }}</p> <!-- Alice → ALICE -->
<p>{{ age|default:"๋์ด ๋ฏธ์
๋ ฅ" }}</p> <!-- None → ๋์ด ๋ฏธ์
๋ ฅ -->
<p>{{ items|length }}</p> <!-- [1, 2, 3] → 3 -->
3. ํ๊ทธ (Tags)
- ๋์ ๋ก์ง์ ํ
ํ๋ฆฟ์ ์ถ๊ฐํ๊ธฐ ์ํด ์ฌ์ฉํฉ๋๋ค
- ๊ตฌ๋ฌธ: `{% tag_name %}`
์กฐ๊ฑด๋ฌธ
{% if condition %}
<p>์กฐ๊ฑด์ด ์ฐธ์
๋๋ค.</p>
{% else %}
<p>์กฐ๊ฑด์ด ๊ฑฐ์ง์
๋๋ค.</p>
{% endif %}
๋ฐ๋ณต๋ฌธ
{% for item in items %}
<li>{{ item }}</li>
{% empty %}
<p>๋ชฉ๋ก์ด ๋น์ด ์์ต๋๋ค.</p>
{% endfor %}
์ฃผ์ ํ๊ทธ
ํ๊ทธ |
์ค๋ช
|
์์ |
`if` |
์กฐ๊ฑด๋ฌธ |
`{% if user.is_authenticated %}` |
`for` |
๋ฐ๋ณต๋ฌธ |
`{% for item in items %}` |
`block` / `extends` |
ํ
ํ๋ฆฟ ์์ |
`{% block content %}` |
`include` |
๋ค๋ฅธ ํ
ํ๋ฆฟ ํ์ผ ํฌํจ |
`{% include 'header.html' %}` |
`csrf_token` |
CSRF ํ ํฐ ์ถ๊ฐ |
`<input type="hidden" name="csrfmiddlewaretoken" value="{{ csrf_token }}">` |
4. ์ฃผ์
- ์ฃผ์์ ํ
ํ๋ฆฟ์ ๋ ๋๋ง๋์ง ์์์
{# ์ด ๋ถ๋ถ์ ์ฃผ์ ์ฒ๋ฆฌ๋ฉ๋๋ค. #}
5. ํ
ํ๋ฆฟ ์์
- ํ
ํ๋ฆฟ ๊ตฌ์กฐ๋ฅผ ์ฌ์ฌ์ฉํ๊ธฐ ์ํ ๊ธฐ๋ฅํฉ๋๋ค
๊ธฐ๋ณธ ํ
ํ๋ฆฟ (base.html)
<html>
<head>
<title>{% block title %}๊ธฐ๋ณธ ์ ๋ชฉ{% endblock %}</title>
</head>
<body>
{% block content %}
๊ธฐ๋ณธ ๋ด์ฉ
{% endblock %}
</body>
</html>
ํ์ฅ ํ
ํ๋ฆฟ (home.html)
{% extends "base.html" %}
{% block title %}ํ ํ์ด์ง{% endblock %}
{% block content %}
<p>ํ ํ์ด์ง ๋ด์ฉ์
๋๋ค.</p>
{% endblock %}
6. Include (ํ
ํ๋ฆฟ ๋ถ๋ฆฌ)
- ๋ค๋ฅธ ํ
ํ๋ฆฟ ํ์ผ์ ํ์ฌ ํ
ํ๋ฆฟ์ ์ฝ์
ํฉ๋๋ค
header.html
<header>
<h1>My Website</h1>
</header>
main.html
{% include "header.html" %}
<p>๋ฉ์ธ ํ์ด์ง ๋ด์ฉ</p>
7. URL ํ๊ทธ
- `url` ํ๊ทธ๋ฅผ ์ฌ์ฉํด URL Reverse ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค
<a href="{% url 'home' %}">ํ์ผ๋ก</a>
views.py
from django.urls import path
urlpatterns = [
path('', views.home, name='home'),
]
8. Static ํ์ผ ์ฌ์ฉ
- CSS, JS, ์ด๋ฏธ์ง ํ์ผ์ ํ
ํ๋ฆฟ์ ํฌํจํฉ๋๋ค
- `load static` ํ๊ทธ๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ ํ์ผ ๊ฒฝ๋ก๋ฅผ ์ง์ ํด์ค์
{% load static %}
<link rel="stylesheet" href="{% static 'css/style.css' %}">
<img src="{% static 'images/logo.png' %}" alt="Logo">
9. Custom Filter/Tag ์ ์
- ํ
ํ๋ฆฟ์์ ์ฌ์ฉ์ ์ ์ ํํฐ๋ ํ๊ทธ๋ฅผ ์ถ๊ฐํ ์ ์์ด์
custom_tags.py
from django import template
register = template.Library()
@register.filter
def multiply(value, arg):
return value * arg
์ฌ์ฉ
<p>{{ 5|multiply:3 }}</p> <!-- ์ถ๋ ฅ: 15 -->
10. ๋ด์ฅ ํ
ํ๋ฆฟ ํํฐ ๋ฐ ํ๊ทธ
- Django๋ ์์ฃผ ์ฌ์ฉํ๋ ํํฐ์ ํ๊ทธ๋ฅผ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณตํด์ค๋๋ค
์ ๋ฆฌ ๐งน
- DTL์ Django์์ ๋์ ์น ํ์ด์ง๋ฅผ ์์ฑํ๋ ํต์ฌ ๋๊ตฌ์ด๋ค~
- ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ, ์กฐ๊ฑด/๋ฐ๋ณต ๋ก์ง, ํ
ํ๋ฆฟ ์์ ๋ฑ์ ๊ธฐ๋ฅ์ ํตํด ์ ์ง๋ณด์์ฑ๊ณผ ์ฌ์ฌ์ฉ์ฑ์ ๋์ฌ์ค๋ค~
- ํํฐ์ ํ๊ทธ๋ฅผ ์ ์ ํ ํ์ฉํ๋ฉด ๋์ฑ ๊ฐ๋ ฅํ๊ณ ๊น๋ํ ํ
ํ๋ฆฟ ์ฝ๋๋ฅผ ์์ฑํ ์ ์๋ค~ ๐