- 해당강좌: https://www.udemy.com/course/djangogirls-with-askdjango/learn/lecture/9431208#overview
해당 튜토리얼: https://tutorial.djangogirls.org/ko/dynamic_data_in_templates/
웹페이지에서도 여러 자원을 각기다른 URI로 구분하듯이, 장고로 웹페이지를 만들때도, 예를들어 블로그의 글이라면, 첫번째 글은 http://(호스트명)/blog/1, 두번째 글은 http://(호스트명)/blog/2 와 같이 구분해 준다.
그러면 그런 url 패턴에 따라서 그에맞는 웹페이지와 DB를 불러와 주는 것이다.
(물론 http://(호스트명)/blog/?id=2 같은 방법도 있겠지만, 장고의 형식에서는 이걸 쓰지 않는다.)
view(뷰) 수정하기 (쿼리셋 반환)
이번 시간에는, 전에 뷰(view)에서
# (애플리케이션명).views.py
from django.shortcuts import render
def post_list(request):
return render(request, '(애플리케이션명)/post_list.html', {})
와 같이 post_list.html 파일을 참조해줬지, db값은 넘겨주지 않았었는데, 전시간에 배운 ORM의 쿼리셋(QuerySet)을 이용해서, DB를 읽어온 쿼리셋을 세번째인자로 넘겨주자.
그렇게 되면 장고 템플릿에서도 이제 쿼리셋의 DB데이터도 사용할 수 있을 것이다.
from .models import Post
우선 Post 모델을 불러오기 위해서, 위같이 임포트(가져오기)를 해준다.
그리고 이제, post_list 라는 view(뷰) 함수에서, 사실
qs = Post.objects.all()
으로 모든 객체를 가져오는 쿼리셋을 만들 수 있는데, 전에 ORM과 쿼리셋 공부했던 것을 활용해서,
qs = Post.objects.filter(published_date__lte=timezone.now()).order_by('published_date')
# 참고로, timezone을 사용했으니 from django.utils import timezone 해주는 것을 잊지말자.
와 같이 필터와 정렬을 사용해서 객체 목록을 가져와 준다.
이것의 쿼리셋을 변수에 담아서 저장해주면된다.
qs = Post.objects.all()
qs = qs.filter(published_date__lte=timezone.now())
qs = qs.order_by('published_date')
물론 위의 체이닝으로 한줄에 쿼리셋을 가져오는게 보기 안좋다면, 이렇게 여러 줄로 끊어서 해도 결과는 변함없다.
그리고 이제 이 결과를 담은 쿼리셋의 변수를 render 함수의 세번째 인자로 추가해주어서 반환해주면 된다.
# (애플리케이션명).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})
참고로 쿼리셋 변수만 인자값에 넣어주면, 이름이 없이 값만 주는 것이기에, 이 쿼리셋을 식별하는 이름도 지정해주자. 그것을 이제 {'이름': 쿼리셋변수}
와 같은 딕셔너리 구조로 전달해주면 이제 끝!
'웹(Web) > 장고(Django)' 카테고리의 다른 글
1-11. 장고 정적(Static)파일, CSS로 웹페이지 예쁘게 만들기 (0) | 2021.01.14 |
---|---|
1-10. 장고 템플릿의 심화 (0) | 2021.01.14 |
1-8. 장고 ORM 과 쿼리셋(Query Set) (0) | 2021.01.14 |
1-7. HTML 시작하기 (0) | 2021.01.14 |
1-6. 장고 뷰(view) (0) | 2021.01.14 |