icon picker
템플릿 동적 데이터

블로그 글은 각각 다른 장소에 조각조각 나눠져있어요. Post모델은 models.py파일에, post_list모델은 views.py파일에 있어요. 그리고 앞으로 템플릿도 추가해야 합니다.
이번 장에서는 콘텐츠(데이터베이스 안에 저장되어 있는 모델)를 가져와 템플릿에 넣어 보여주는 것을 해볼 거에요.
뷰(view)는 모델과 템플릿을 연결하는 역할을 합니다.
post_list에서 보여주고 이를 템플릿에 전달하기 위해서는, 모델을 가져와야 합니다.
일반적으로 가 템플릿에서 모델을 선택하도록 만들어야 합니다.
blog/views.py파일을 열어봅시다. post_list 내용을 봅시다.
blog/views.py
from django.shortcuts import render

def post_list(request):
return render(request, 'blog/post_list.html', {})
models.py파일에 정의된 모델을 가져올 거에요. from .models import Post을 추가하세요.
blog/views.py
from django.shortcuts import render
from .models import Post
from 다음에 있는 마침표(.)는 현재 디렉토리 또는 애플리케이션을 의미합니다.
동일한 디렉터리 내 views.py, models.py파일이 있기 때문에 . 파일명 (.py확장자를 붙이지 않아도)으로 내용을 가져올 수 있습니다.
이제 Post모델을 불러봅시다.
Post모델에서 블로그 글을 가져오기 위해서는 쿼리셋(QuerySet)이 필요합니다.

쿼리셋(QuerySet)

블로그 글 목록을 살펴봅시다.
글 목록을 게시일 published_date기준으로 정렬해볼까요? 이미 Django ORM과 QuerySets 장에서 해본 내용이에요.
blog/views.py
Post.objects.filter(published_date__lte=timezone.now()).order_by('published_date')
다음으로 blog/views.py파일 내 def post_list(request)함수에 아래 코드 내용을 넣어봅시다.
제일 먼저 timezone 모듈을 불러와야하니 from django.utils import timezone를 추가하는 것을 잊지 마세요.
blog/views.py
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 QuerySet을 템플릿 컨텍스트에 전달하는 것입니다.
맨 마지막에 이 부분을 다룰 거에요.
우리는 posts라는 변수를 만들고 있어요!
위에 말한 변수는 퀴리셋의 이름입니다.
render함수에는 매개변수 request(사용자가 요청하는 모든 것)와 'blog/post_list.html' 템플릿이 있습니다.
{}이 보일 텐데, 이곳에 템플릿을 사용하기 위해 매개변수를 추가할 거에요. (이 매개변수를'posts'라고 할거에요)
{'posts': posts}이렇게 작성할거에요.
:이전에 문자열이 와야하고, 작은 따옴표''를 양쪽에 붙이는 것을 잊지 마세요.
이제 blog/views.py코드는 아래 코드처럼 보일 겁니다.
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})
이제 다음장으로 넘어가봐요!

Want to print your doc?
This is not the way.
Try clicking the ⋯ next to your doc name or using a keyboard shortcut (
CtrlP
) instead.