티스토리 뷰

앞선 포스팅에 이어 detail페이지와 base 페이지를 만들어보겠습니다.

 

home에서 post 제목을 링크로 받아 본문을 보여주는 것을 해보도록 하겠습니다.

 

우선 그 전에 본문을 보이려면 뭔가 내용이 좀 더 알차면 좋을 것 같아 날짜도 추가해주겠습니다.

models.py로 들어가 다음을 추가해 줍니다.

django에서 기본으로 제공하는 timezone이라는 module을 import하고, 날짜를 기록할 date를 추가해줍니다. 그리고 default 값으로 현재 시간을 나타내는 timezone.now를 추가해줍니다. (미국시간 기준입니다!)

 

이제 templates에 detail.html을 추가하고, url에 다음과 같이 적어줍니다.

urlpatterns = [
    path('admin/', admin.site.urls),
    path('',siteapp.views.home, name="home"),
    path('detail/<int:post_id>',siteapp.views.detail,name="detail"),
]

<int:post_id>라는 부분이 있는데 우리가 쓰는 글은 한 개가 아니라 여러 개입니다. 여기서 각각의 글 마다 html, view를 만들어 보여줄 수도 있지만 그 수가 수십개, 수백개인 경우 감당할 수 없을 것입니다. 

그렇기에 pk (primary key)를 이용하여 몇 번 째 글인지 글의 id를 받아 보여주도록 하겠습니다.

 

views.py에서 detail 함수를 적어줍시다. (home에서 posts로 바꿨습니다 ㅎㅎ)

get_object_or_404를 이용해 해당 페이지가 존재하지 않으면 404 에러를 띄우도록 합니다. 어떤 옛날 링크 등을 들어가면 자주 볼 수 있는 에러입니다. 

그리고 post_detail이라는 변수에 pk = post_id 를 이용하여 필요한 pk값을 인자로 받은 post_id로 받습니다. 그리고 detail.html을 띄우도록 render 함수를 return 합니다.

 

이제 detail.html을 띄우기 위해 다음의 작업을 합시다. 아래는 home.html입니다.

 

<a>태그를 이용해 링크를 달아주는데 저기서 또한 {% %} 가 나옵니다. url에서 detail이란 이름에 post.id를 붙혀라 라는 뜻입니다. post는 views에서 불러온 posts에 있는 객체들입니다. 그리고 {{ }} 는 views에서 불러온 값을 print 해주는 기능을 합니다. 이렇게 설정한 뒤 서버를 돌립시다.

 

제가 지난 번에 썼던 두 글의 제목과 링크가 나옵니다. 

이제 detail.html을 간단히 써봅시다.

views에서 detail이란 함수가 Post 중에서 인자로 받은 post_id를 pk로 갖는 객체만을 가져왔습니다. 그리고 그것을 'post'란 이름으로 detail.html에 이용할 수 있게 하는 것입니다.

 

위의 링크를 타고 들어가면 다음과 같습니다.

첫 글에 포함된 제목, 날짜, 본문이 모두 보입니다. 

 

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
TAG
more
«   2025/02   »
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
글 보관함