๋ชฉ์ฐจ
Django ํ ํ๋ฆฟ ๋ฌธ๋ฒ
template์์ DB์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ ๋ฐฉ๋ฒ์ ๋ํด ์์๋ณด์
HTMLํ์ผ์ ์ ์ ํ์ผ์ด๋ค. ๊ทธ์ ๋ฐํด ํ์ด์ฌ์ ๋์ ์ด๋ค.
ํ ํ๋ฆฟ ๋ฌธ๋ฒ์ ํ์ด์ฌ์ HTML๋ก ๋ณํ์์ผ, ๋น ๋ฅด๊ณ ์ฝ๊ฒ ๋์ ์ธ ์น ์ฌ์ดํธ๋ฅผ ๋ง๋ค ์ ์๊ฒ ๋์์ฃผ๋ ์ญํ ์ ํ๋ค.
๋์ ๋ฐ์ดํฐ
์ ๋ฒ ํฌ์คํ ์์ ๋ค๋ฃจ์๋ ์ฟผ๋ฆฌ์ ์ ์ด์ฉํ์ฌ views.py์์ ์ํ๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์์ผํ๋ค.
ex)
from django.shortcuts import render
from django.utils import timezone
from .models import Post
def post_list(request):
posts = Post.objects.filter(published_date__lte=timezone.now()).order_by('published_date')
return render(request, 'blog/post_list.html', {'posts': posts})
views.py์์ ์ ์ํ ํจ์๋ฅผ ์ดํด๋ณด๋ฉด
์ฟผ๋ฆฌ์ ์ ์ด์ฉํ์ฌ posts๋ผ๋ ๋ณ์์ DB์์ ๊ฐ์ ธ์จ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ์๋ค.
ํด๋น ๋ฐ์ดํฐ๋ renderํจ์๋ฅผ ํตํด template์ผ๋ก ์ ๋ฌ๋๋ค.
{'posts': posts}๊ฐ ๋ฐ๋ก ๊ทธ ๋ถ๋ถ์ด๋ค.
ํ ํ๋ฆฟ ๋ฌธ๋ฒ
ํ ํ๋ฆฟ์์๋ ํน์ ํ ๋ฌธ๋ฒ์ ์ด์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ํธ๋ค๋งํ ์ ์๋ค.
๊ทธ ์ค ๋ช ๊ฐ์ง๋ฅผ ์์๋ณด์
1. {{ }}
- ์ค๊ดํธ 2๊ฐ๋ฅผ ๊ฒน์น ๋๋ ๋ณ์๋ฅผ ์๋ฏธํ๋ค. ์ฌ์ฉ๋๋ ๋ณ์๋ view์์ ์ ๋ฌ๋ ๊ฒ์ด๋ค.
- ์์๋ก posts.title ๊ณผ ๊ฐ์ด ํด๋น ๋ฐ์ดํฐ์ ๋ฉค๋ฒ๋ค์ ๋ํ ์ ๊ทผ๋ ๊ฐ๋ฅํ๋ค.
{{ posts }}
2. ํฌํ๋ฆฟ ํ๊ทธ {% %}
- html ์์์ ํ๋ก๊ทธ๋๋ฐ ๋ก์ง์ ์ด์ฉํ ์ ์๋ ํ๊ทธ์ด๋ค.
- load static, for, if ๋ฑ
- and, or, not, and not, > >=, < <= ,in, not in ๋ฑ์ ๋น๊ต์ฐ์ฐ์ด ๊ฐ๋ฅํ๋ค.
- ์์_1) ๊ฐ์ฒด์ ์งํฉ์ for loop๋ก ํ ๊ฐ์ฉ ํธ๋ค๋งํ ์ ์๋ค.
{% for post in posts %}
{{ post }}
{% endfor %}
- ์์_2) if๋ฌธ์ผ๋ก ์กฐ๊ฑด์ ๋ถ์ฌํ ์ ์๋ค.
{% if not user.is_authenticated %}
<div class="username">
<a href="{% url 'login' %}" class="login-link">
Login
<i class="fas fa-sign-in-alt"></i>
</a>
</div>
{% else %}
<div class="username">Hello {{ user.username }} (<a href="{% url 'logout' %}">Logout <i class="fas fa-sign-out-alt"></i></a>)</div>
{% endif %}
- ์์_3 {% csrf_token %}
CSRF ๊ณต๊ฒฉ ๋ฐฉ์ง๋ฅผ ์ํ ํ๊ทธ์ด๋ค, ์ฅ๊ณ ๋ด๋ถ์ ์ผ๋ก CSRF ํ ํฐ๊ฐ์ ์ ํจ์ฑ์ ๊ฒ์ฆ.
formํ๊ทธ์ ์ฒซ ์ค์ ์ ๋ ฅํ๋ค.
- ์์_4 {% load ... %}
์ฌ์ฉ์ ์ ์ ํ๊ทธ ๋ฐ ํํฐ๋ง ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์จ๋ค.
์ ์ ํ์ผ๋ ๊ฐ์ ธ์ฌ ์ ์๋ค.
-์์_5 block content, extends
ํ ํ๋ฆฟ ํ์ฅ์ ํ์ฉํ๋ ํ๊ทธ์ด๋ค.
๊ธฐ์ template
<div class="post-list">
{% block content %}
{% endblock %}
</div>
ํ์ template
{% extends 'blog/base.html' %}
{% block content %}
<h1>New post</h1>
<form method="POST" class="post-form">{% csrf_token %}
{{ form.as_p }}
<button type="submit" class="save btn btn-default"><i class="fas fa-save"></i></button>
</form>
{% endblock %}
3. ํ ํ๋ฆฟ ํํฐ { ... | ~ }
- ํ ํ๋ฆฟ ๋ณ์์ ๊ฐ์ ํน์ ํ ํ์์ผ๋ก ๋ณํํ ๋ ์ฌ์ฉํ๋ค.
- ๋ณ์๋ช '|' ๋ค์ ํํฐ๋ฅผ ๋ถ์ธ๋ค.
ex)
- length, upper, lower, linebreaksbr(ํ ๋ฐ๋ ์ ๋ฌธ๋จ ๋ฐ๊ฟ)
์ถ๊ฐ ์๋ฃ
(https://docs.djangoproject.com/en/1.11/ref/templates/builtins/#ref-templates-builtins-tags)
'๐ | WEB DEV > Django' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Django_์ฅ๊ณ ๋ถ์๊ธฐ (6)_CRUD (0) | 2022.06.30 |
---|---|
Django_์ฅ๊ณ ๋ถ์๊ธฐ (5)_ํ์ด์ง ์ด๋, ์์ธ ํ์ด์ง (0) | 2022.06.30 |
Django_์ฅ๊ณ ๋ถ์๊ธฐ (3)_QuerySet (0) | 2022.06.30 |
Django_์ฅ๊ณ ๋ถ์๊ธฐ (2)_MVT ์์ฑ (0) | 2022.06.30 |
Django_์ฅ๊ณ ๋ถ์๊ธฐ (1)_๊ธฐ์ด (0) | 2022.06.30 |
๋๊ธ