Tech/Django
[Django] 02. Template
aeightchill
2025. 2. 11. 23:12
728x90

๐ Render
Render ํจ์
- ์ด๋ค ๋ฐ์ดํฐ๋ฅผ ๋ฐํ์ผ๋ก '.html' ์์ ์๋ ๋ด์ฉ์ ์์ฑํ๋ค๋ ๋๋์ ๊ฐ๊น๋ค.
# views.py
def index(request):
return render(request, '.html', {})
Render ํจ์์ ํ๋ผ๋ฏธํฐ
request : http request๋ฅผ ๋ฐ์ ๊ฒ์ ๊ทธ๋๋ก ์ธ์๋ก ์ ๋ฌํ ๊ฒ
'.html' : ์๋ต์ ํ๋ ๊ณผ์ ์์ ๋ณด์ฌ์ค file์ ์ง์
{} : request, '.html'์ ์ฒ๋ฆฌํ๋ ๊ณผ์ ์์ ์ฌ์ฉํ ์ฌ๋ฌ ์ธ์๋ค (dictionary ํํ๋ก ์ ๋ฌ)
๐ HTML ๊ด๋ฆฌํ๋ ๋ฐฉ๋ฒ (์ฌ๋ฌ ๊ฐ์ง...)
๊ฐ ์ฑ์ Directory์์ ๊ด๋ฆฌ
- homepage > template (์์ฑ)
- template > index.html (์์ฑ)
HTML
HTML์ ์ด๋ฆฐ ํ๊ทธ์ ๋ซํ ํ๊ทธ๋ก ์ด๋ฃจ์ด์ ธ ์๋ค.
<!DOCTYPE html>
<html>
<head>
<title> </title>
</head>
<body>
<h1> </h1>
<p> </p>
</body>
</html>
<head>
<!-- - html file์ ๋ํ ๋ฉํ์ ์ธ ์ ๋ณด
- ๋ณด์ด๋ ๋ถ๋ถ์ด ์๋ ๊ทธ ๋ค์์ ์ด๋ค์ง๋ ๋ถ๋ถ์ ๋ํ ์์ฑ -->
<title> Python django example </title>
</head>
<body>
<!-- ์ฌ์ฉ์๊ฐ ๋์ผ๋ก ํ์ธํ ์ ์๋ ์์ -->
<h1> Title </h1> <!-- ์ ๋ชฉ๊ณผ ๊ฐ์ ๋ถ๋ถ์ ์์ฑ -->
<p> blah blah blah </p> <!-- ๋ฌธ๋จ ํ๊ทธ (๋ด์ฉ) -->
</body>
๐ HTML ์์ฑ ์ดํ
# ์์ฑํ html file์ render ํจ์์ ๋๋ฒ์งธ ์ธ์๋ก ์์ฑํด์ผํ๋ค.
render(request, 'index.html', {})
๐ webproj โ settings.py
webproj > settings.py
TEMPLATES = [
'DIRS' : ['homepage/template/index.html'] # directory๋ฅผ ์ ์ฅํ๋ ๊ณณ
# Template๋ค์ด ๋ด๊ธด ์์น๋ฅผ ์ง์ ํด์ค์ผ ํ๋ค.
]
'homepage/template/index.html' ๋ผ๊ณ ์ผ์ ๋์ ๋ฌธ์
- django๋ ๋ด ์ปดํจํฐ ์์์ webproj ๋๋ ํ ๋ฆฌ๊ฐ ์ด๋ ์๋์ง ๋ชจ๋ฅธ๋ค.
- ['homepage/template/index.html'] โ [BASE_DIR + ...]
์ ์ฝ๋์ฒ๋ผ ์ฐ๊ธฐ๋ณด๋ค๋ os ์ฌ์ฉํด์ ์๋์ ๊ฐ์ด ์์ฑํ๋ค.
os.path.join(BASE_DIR,"homepage","template")

๐ ์ค์๊ฐ์ผ๋ก ๋ณํ๋ ์ ๋ณด๋ค์ ์ด๋ป๊ฒ ์ฒ๋ฆฌํ ๊น
๊ณ ์ ๋์ด ์๋ ๋ณ์์ ๋ํ
# views.py >
def index(request):
number = 10
return render(request, 'index.html', {"my_num" : number})
# index.html >
<body> ๋ด์ ์์ฑ
<p> {{ my_num }} </p> # my_num์ ํด๋นํ๋ ์ ๋ณด๋ฅผ ์ถ๋ ฅํ๊ฒ ๋๋ค.
์กฐ๊ฑด์ด๋ ๋ฐ๋ณต์ ๋ก์ง ์ฝ์ & template filter
template filter
- ๋ณ์์ ๊ฐ์ ํน์ ํ์์ผ๋ก ๋ณํํ ๋ ์ฌ์ฉ
- ๊ฐ์ ๊ธธ์ด๋ ์ง ํน์ ๊ฐ๋ง ์ํ ๋
# views.py >
def index(request):
name = "Michael"
return render(request, 'index.html', {"my_name" : name})
# index.html >
<p>{{ my_name | length}}</p> # length(๊ธธ์ด์ถ๋ ฅ) ๋ผ๋ filter ์ ์ฉ
<p>{{ my_name | upper}}</p> # ๋ชจ๋ ๊ฐ์ด ๋๋ฌธ์๋ก
''' document๋ฅผ ์ฐธ๊ณ ํด์ ์ํ๋ filter๋ฅผ ์ฐพ์์ ์ ์ฉํ๋ฉด ๋๋ค. '''
template tag
for tag
# index.html >
<body> ๋ด์ ์์ฑ
{% tag ... %} # ์์
์ ์ฉํ ๋ก์ง์ ์์ฑ
{% endtag ... %} # ์ข
๋ฃ
''' document๋ฅผ ์ฐธ๊ณ ํด์ ์ํ๋ tag๋ฅผ ์ฐพ์์ ์ ์ฉํ๋ฉด ๋๋ค. '''
# for tag
{% for a in b %} # b๋ template์ ๋๊ฒจ์ฃผ๋ ๋ฐ์ดํฐ๊ฐ ์์ด์ผ ํ๋ค.
# views.py > def index(request): nums = [1,2,3,4,5] return render(request, 'index.html', {"my_list" : nums}) # index.html > {% for element in my_list %} <p>{{ element }}</p> {% endfor %}
if tag
# if tag
{% for element in my_list %} # |(template filter)๋ก ์กฐ๊ฑด์ ๊ฑธ ์ ์๋ค. # ์ง์๋ง ์ถ๋ ฅํ๊ฒ ํ๊ธฐ {% if element|divisibleby:"2" %} # element๊ฐ ์ซ์ 2์ผ๋ก ์ฝ๋ถ์ด ๋๋ฉด element๋ฅผ ์ถ๋ ฅ <p>{{ element }}</p> {% endif %} {% endfor %}โ
# if not tag
{% for element in my_list %} # |(template filter)๋ก ์กฐ๊ฑด์ ๊ฑธ ์ ์๋ค. # ํ์๋ง ์ถ๋ ฅํ๊ฒ ํ๊ธฐ {% if not element|divisibleby:"2" %} <p>{{ element }}</p> {% endif %} {% endfor %}โ
728x90