Django

Django 템플릿과 데이터베이스 연결

nyanguk 2021. 1. 18. 23:50

이전 게시물에서 모델을 기반으로 생성되는 데이터들을 조회하고 검색,정렬하는 것을 진행했다. 

그러나 우리는 터미널 창을 통해 코드를 입력하여 데이터를 보는 것이 주 목적이 아니라 어플리케이션을 실행했을때(URL에 접속 했을때) 보여지는 페이지에 데이터들을 표시하는 것이 목적이다.

데이터들을 템플릿에 보이기 

blog에 models.py, views.py ,urls.py가 존재 한다. 

  • models.py - blog 어플리케이션에 저장되는 데이터의 클래스명. 필드명과 타입을 명시한다.
  • urls.py -  blog 어플리케이션에 접속하는 유형에 따라 다른 메소드를 실행시키는 등의 특정  task를 부여한다..
  • views.py - urls.py에서 지정한 특정 task 의 구현을 담당한다.
mysite의 urls.py 와는 다른 역할이다.

즉 views.py는 모델과 url을 연결하여 특정 task들을 구체저으로 구현하는 역할임을 알수 있다.

이전에 작성했던 코드를 확인하고 데이터베이스에서 어떤 데이터를 가져와 템플릿에 전달할지 생각해보자

from django.shortcuts import render
# Create your views here.
def post_list(request):
    return render(request, 'blog/post_list.html', {})

위의 코드에서 선언된 post_list는  post_list.html을 열어야하고 그 페이지에는 post들을 목록화 하여 보여줘야한다.

이미 게시된 post의 정보를 가져오기 위해 먼저 모델의 Post를  불러와야 하며 템플릿은 쿼리셋을 이용해 템플릿내에서 조작 할수 있음으로 템플릿에게 쿼리셋을 전달해야한다.

 

from django.shortcuts import render
from .models import Post
# Create your views here.
posts=Post.objects.all()
def post_list(request):
    return render(request, 'blog/post_list.html', {'posts':posts})

 

위의 코드처럼 먼저 Post를 불러오고 모든 post 에 대한 쿼리 셋을 posts라는 변수에 저장한다. 그다음  render의 매개변수로

'posts':posts 의 형태로 전달하면 템플릿에서 이를 사용할 수 있게 된다.

':' 을 기준으로 오른쪽에는 문자열이 왼쪽에는 쿼리셋을 담은 변수명이 들어가야한다. 
템플릿에서는 오른쪽 문자열을 이용해 데이터를 조작한다.
장고걸스 튜토리얼에서는 잘못된 방법인 =  을 사용한다.