www.youtube.com/watch?v=7a23TbUXfWE&list=PL-51WBLyFTg2vW-_6XBoUpE7vpmoR3ztO&index=8
이 포스팅은 다음과 같은 youtube 영상을 따라하면서 배운 내용과 학습 내용을 담은 것이다:
- Dennis Ivy - Rendering Data to Templates | Template Tags | Django Framework (3.0) Crash Course Tutorials (pt 8)
현재 Django Version 3.1.2 를 쓰고 있다. Django는 파이썬을 쓰는 오픈소스 웹 프레임워크이다. 웹사이트 만들때 주로 쓰며, 간단한 것이 큰 특징이다.
※ Rendering Data to Templates
우리가 그러면 QuerySet에 저장된 데이터를 어떻게 프론트엔드에 표시시킬까? 그것은 Template Tags를 사용해서 가능하다.
# views.py
from django.shortcuts import render
from django.http import HttpResponse
from .models import *
def home(request):
return render(request, 'accounts/dashboard.html')
def products(request):
products = Product.objects.all()
return render(request, 'accounts/products.html', {'products': products})
def customer(request):
return render(request, 'accounts/customer.html')
위의 코드와 같이 models.py에서 products함수에 추가한다.
products = Product.objects.all()은 Product라는 class에 있는 모든 object를 불러오는 함수이다. 이 모든 objects 들을 products에 저장시킨다.
다음, render()안에 dictionary를 저장시키는데, key인 'products'는 우리가 template에서 칭할 단어를 의미하는 것이므로 어떤 단어가 되어도 사실 상관 없다. 하지만 그 단어를 일관성 있게 template에서 사용해야 한다. value인 product는 products = Product.objects.all()을 할때 products이다.
<!-- prodcuts.html -->
...
<table class="table">
...
{% for i in products %}
<tr>
<td>{{i.name}}</td>
<td>{{i.category}}</td>
<td>{{i.price}}</td>
</tr>
{% endfor %}
...
</table>
...
이후, products.html에서 다음과 같은 부분을 추가해준다. {% for i in products%}가 template tags로, views.py에 있는 products function의 dictionary key의'products'를 불러오는 것이다. 거기에 이제 name, category, price를 불러준다.
이제는 Products 뿐만 아니라 다른 함수에도 적용할 수 있다
# views.py
from django.shortcuts import render
from django.http import HttpResponse
from .models import *
def home(request):
orders = Order.objects.all()
customers = Customer.objects.all()
total_customers = customers.count()
total_orders = orders.count()
delivered = orders.filter(status="Delivered").count()
pending = orders.filter(status="Pending").count()
context = {'orders':orders, 'customers':customers, 'total_customers':total_customers, 'total_orders':total_orders, 'delivered':delivered, 'pending':pending}
return render(request, 'accounts/dashboard.html', context)
def products(request):
products = Product.objects.all()
return render(request, 'accounts/products.html', {'products': products})
def customer(request):
return render(request, 'accounts/customer.html')
customers 와 orders라는 변수를 새로 지정해주고, total_customers는 그 customers의 총 수를 세는 것이다. total_orders도 같은 원리로 orders의 총 수를 세는 것이다.
여기서 delivered의 경우, orders.filter(status="Delivered").count()를 통해, status가 Delivered로 되어 있는 orders를 세주고 저장시키는 것이다.
마지막으로 products에 할때는 직접 dictionary를 render()에 넣었지만, context라는 dictionary를 새로 지정해서 render()에서 context를 불러옴으로써 더 간단하게 하는 것으로 했다.
이에 따라 frontend의 template들을 다 적절하게 바꿔주면 될 것이다. (앞서 쓴 template tags를 사용해서 하면 된다.)