본문 바로가기
Web/django

(Django) first project6 - Model , view, template 데이터 전달

by 스퀴시 2020. 8. 13.
728x90
SMALL

Django는 MTV 모델로써, Model의 data를 사용자에게 보이는 template까지 전달해야 한다.

이전 post까지 MTV가 무엇인지는 파악했다고 생각하므로 바로 설명하겠다.

 

- view.py에서 model 가져오기

#blog/view.py

from django.shortcuts import render
from django.utils import timezone
from .models import Post                    #blog(application) 의 모델 import 

# Create your views here.


# request를 받아서 render method를 호출하여 post_index.html을 render(보여줌)
def post_index(request):
    posts = Post.objects.filter(published_date__lte=timezone.now()).order_by('published_date')
    return render(request, 'blog/post_index.html',{'posts' :posts})

 위 코드를 보면,

1. 우선 view.py에서 blog의 model로부터 Post를 import한다.

2. 정의한 post_index()에서 QuerySet을 이용해 posts 변수를 만든다.

3. blog/post_index.html을 render할때, 'posts' 라는 매개변수로 posts를 전달해 준다.

 -> 다른 언어를 해봤다면, 함수에 인자로 넘겨준다고 생각하면 편해요.

 

- template에서 전달받은 posts 이용

 

template에서 전달받은 인자를 사용하기 위해, 아래와 같이 사용한다.

{{ posts }}

#posts의 변수 하나씩 참조 

{% for post in posts %}
     {{ post }} 
     {{ post.title }}  // 객체이므로 속성 이용
{% endfor %}

 

실제 사용한 코드와 화면

#blog/templates/blog/post_index.html

<html>
    <head>
        <title>SJ's Blog </title>
    </head>
    <body>
        <center>
            <h1 style="color:skyblue">hello world</h1>
        </center>
        <hr>
        {% for post in posts %}
        <div>
            <h1><a href='/'>{{ post.title }}</a></h1>
            <p> {{post.content|linebreaksbr}} </p>
            <h5> author : {{ post.author }} , {{post.published_date}}</h5>
        </div> 
        <hr/>
    {% endfor %}

    </body>
</html>

 

homepage

지금까지 posting으로 기본적인 web page를 구성하였다. 

이 지식을 바탕으로 간단한 게시판을 만들어 보도록 하겠다 .

다음 posting에서 gogo~

LIST