일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 디스코드봇
- IT동아리
- 멋사 서류
- 백엔드
- 웹동아리
- django
- 멋쟁이 사자처럼
- 멋사10기
- 기사 제목 크롤링
- 깃허브
- 크롤링
- 멋사 10기
- 멋쟁이사자처럼11기
- ㅏㄴ
- 멋쟁이사자처럼 서류
- 멋사 서류평가
- 멋쟁이사자처럼대학
- 멋사
- 멋사 면접
- 멋사11기
- 멋쟁이사자처럼
- 멋사 합격
- 파이썬 크롤링
- 파이썬
- 멋사12
- 알림봇
- API
- 멋쟁이사자처럼10기
- discord
- 코딩동아리
- Today
- Total
ACHO.pk devlog
[멋쟁이사저처럼10기] Django 블로그 만들기(글 목록 띄우기, url 계층) 본문
https://acho.tistory.com/40와 이어지는 내용입니다.
지금까지 데이터베이스에 등록한 Blog 객체를 전부 다 index.html(기본 페이지)에 띄우는 방법에 대해 알아보자
일단, 데이터베이스로부터 views.py로 Blog 객체들을 가져와야 한다.
QuerySet _ template 언어
views.py
from django.shortcuts import render
from .models import Blog
def home(request):
#블로그 글들을 모조리 띄우는 코드
posts = Blog.objects.all() #데이터베이스로부터 전부 가져와짐
return render(request, 'index.html', {'posts': posts})
index.html
<!-- 블로그 글들의 목록을 보여줄 예정 -->
{{ posts }}
QuerySet으로 감싸진 형태로 렌더링이 되었음을 확인할 수 있다.
QuerySet : 데이터베이스로부터 전달받은 객체 목록
우리가 원하는 형태로 출력하기 위해서는 template 언어를 사용해서 for문을 작성해야 한다.
index.html
{% for post in posts %}
<h3>제목 : {{ post.title }}</h3>
<h4>작성 날짜 : {{ post.date }}</h4>
{{ post.body }}
{% endfor %}
views.py
from .models import Blog
def home(request):
#블로그 글들을 모조리 띄우는 코드
#posts = Blog.objects.all() #데이터베이스로부터 전부 가져와짐
posts = Blog.objects.filter().order_by('-date')
return render(request, 'index.html', {'posts': posts})
#날짜를 기준으로 정렬(오름차순)
posts = Blog.objects.filter().order_by('date')
return render(request, 'index.html', {'posts': posts})
#날짜를 기준으로 정렬(내림차순-최신글)
posts = Blog.objects.filter().order_by('-date')
return render(request, 'index.html', {'posts': posts})
블로그의 상세 페이지 ( Detail Page )
글 제목을 눌렀을 때 상세 페이지로 넘어가는 기능
기본키를 지정하지 않으면 django는 우리가 만든 객체에 숨겨둔 기본키를 자동으로 생성한다.
Title | Body | Date | ID(Primary Key) |
첫번째 글 | 블로그 생성 | 2022-07-01 | 1 |
두번째 글 | 상세페이지 | 2022-07-04 | 2 |
세번째 글 | url mapping | 2022-07-13 | 3 |
index.html
id : django가 임의로 심어놓은 Primary Key
{% for post in posts %}
<h3>제목 : {{ post.title }}</h3>
<h4>작성 날짜 : {{ post.date }}</h4>
django가 만든, 블로그 객체 생성 순서에 해당하는 보이지 않는 기본키 : {{ post.id }}
<br>
{% endfor %}
기본키가 순차적이지 않은 이유는 내가 admin 사이트에서 잘못 올린 글을 삭제했기 때문이다.
urls.py
urlpatterns = [
path('admin/', admin.site.urls),
path('', views.home, name='home'),
#디테일 페이지
path('detail/<int:blog_id>', views.detail, name='detail'),
]
#blog_id 라는 이름의 변수에 정수형으로 담아 detail 함수에 인자로 넘겨준다.
#127.0.0.1:8000/detail/1 첫번째로 생성된 글
#127.0.0.1:8000/detail/2 두번째로 생성된 글
#127.0.0.1:8000/detail/3 세번째로 생성된 글
index.html
블로그 글 제목을 클릭했을 때, detail이라는 문자열을 갖고 있는 url로 이동하고 싶은데, 이 url은 post.id라는 정보도 추가적인 정보가 필요하다.
{% for post in posts %}
<a href = "{% url 'detail' post.id %}"><h3>제목 : {{ post.title }}</h3></a>
<h4>작성 날짜 : {{ post.date }}</h4>
{% endfor %}
views.py
pk 값을 이용해 특정 모델 객체 하나만 갖고오기
객체를 갖고 오거나 404를 띄우라는 의미임
from django.shortcuts import get_object_or_404
Blog에 해당하는 객체를 가져오는데, pk 값이 blog_id인 객체를 가져오라는 의미 +
urls.py의 <int:blog_id>로부터 전달된 post.id(Blog 객체)의 django가 설정한 기본키(숫자)라는 의미임
def detail(request, blog_id):
# blog_id 번째 블로그 글을 데이터베이스로부터 갖고와서
blog_detail = get_object_or_404(Blog, pk=blog_id)
# detail.html로 띄워주는 코드
return render(request, 'detail.html', {'blog_detail':blog_detail})
detail.html
<h1> 제목 </h1>
{{ blog_detail.title }}
<h2> 날짜 </h2>
{{ blog_detail.date }}
<h2> 본문 </h2>
{{ blog_detail.body }}
이전에 블로그 글의 기본키가 1, 4, 5, 8이었다.
아래 하이퍼링크를 클릭해 새 페이지로 들어가게 되면,,,,
url에 ...detail/8 로 되어 있음을 볼 수 있다.
내가 지금 글을 쓰고 있는 티스토리도 이런 방식으로 되어 있다.
'멋쟁이사자처럼' 카테고리의 다른 글
[멋쟁이사저처럼10기] Django 블로그 만들기(댓글 구현) (0) | 2022.07.07 |
---|---|
[멋쟁이사저처럼10기] Django 블로그 만들기(파일 업로드) (0) | 2022.07.06 |
[멋쟁이사저처럼10기] Django 블로그 만들기(글 생성-사용자입력) (0) | 2022.07.04 |
[멋쟁이사저처럼10기] Django models.py (0) | 2022.07.04 |
[멋쟁이사저처럼10기] Django 회사 소개 사이트 만들기 (0) | 2022.06.26 |