멋쟁이 사자처럼 at 한국교통대학교 7기

2019 KNUT X LIKE LION #7

블로그 글 연결

토픽 멋쟁이 사자처럼 at 한국교통대학교 7기 > 웹 애플리케이션 개발 > Django
블로그 글 연결

  • 지금까지 작성한 detail 페이지는 계속 같은 내용만 보여주고 있습니다.
  • 이제 detail 페이지를 연결시켜 각각의 블로그 글의 내용이 보여지도록 만들겠습니다.

 

 

 

urls.py 수정

  • 지금까지 작성한 블로그 글은 눈치채셨을 수도 있겠지만 사실 작성한 글 번호가 있습니다.
  • 기본적으로 데이터베이스에는 테이블(모델)마다 주키(primary key)가 있습니다.
    주키는 테이블에서 인스턴스들을 구별해주는 역할을 합니다.
    따라서 1번째로 작성한 글은 주키 값이 1, 2번째로 작성한 글은 2, ...,  이런 식으로 작성되어 있습니다.
     
  • 주키를 이용한다면 url에서 블로그 글을 접근할 때 번호로 그 값을 구별하여 접근하기에 수월할 것입니다.

 

[firstProject]-[urls.py]를 열어 다음과 같이 수정해줍니다.

path('blogMain/detail/<int:blog_id>/', blogapp.views.detail, name='detail'),
  • int는 integer, 정수라는 뜻입니다.
  • 'blog_id'는 뒤에 views.detail 함수에 넘길 블로그 글 번호입니다.
  • 이와 같이 하면 'blogMain/detail/1'은 블로그 글 1번에 대한 detail 페이지가 나오게 되는 것입니다.

 

 

 

 

 

 

views.py 수정

  • 위에서 [urls.py]에서 'blog_id' 인자 값을 넘겼습니다.
  • 그 값을 받기 위해서 다음과 같이 detail 함수를 수정합니다.

 

from django.shortcuts import render, redirect, get_object_or_404

def detail(request, blog_id):
    blog_detail = get_object_or_404(Blog, pk=blog_id)

    return render(request, 'detail.html', {'blog_detail': blog_detail})
  • 'get_object_or_404'는 모델로부터 객체를 받을 때 객체가 있으면 받고, 없을 시 404 에러 페이지를 보여주도록 하는 것입니다.
    기존에 하였던 것처럼 그냥 객체를 받는 형식과 다르게 하는 이유는 블로그 글이 작성된 객체가 총 10개이면 아무 문제가 없습니다.
    하지만 11번째 블로그 글을 불러온다면 문제가 생기게 되는 것입니다.
    따라서 11번째 블로그 글을 불러온다면 그러한 페이지가 없다는 문구가 있는 404 에러 페이지를 보여주게 되는 것입니다.
     
  • 블로그 글 객체를 판별하기 위해 'blog_id' 값을 매개변수로 받고, 'pk=' 값에 대입하는 것을 볼 수 있습니다.
    이는 이전에 데이터베이스 부분에서 얘기했던 주키(primary key)를 판별하기 위한 작업입니다.

 

 

 

 

 

 

 

blogMain.html 수정

  • 블로그 메인 화면에서 [View navbar docs >>] 버튼을 누르면 각 페이지로 이동할 수 있도록 수정하여 봅시다.

 

<a class="btn btn-lg btn-primary" href="{% url 'detail' blog.id %}" role="button">View navbar docs &raquo;</a>
  • url 템플릿을 활용하여 연결하되, 블로그 글의 번호를 인수로 넘겨줍니다. 
  • 또한, detail 페이지로 이동하면 블로그 글 내용이 출력되므로 굳이 블로그 메인 화면에서 내용을 출력할 필요가 없기에 주석처리하여 보이지 않게 하였습니다.

 

 

 

 

 

detail.html 수정

  • [views.py]에서 'blog_detail'이라는 값으로 값을 전달하였으므로 이를 이용하여 세부 내용을 가져옵니다.
  • 이 외에 블로그 메인 화면으로 링크를 거는 등 내용을 페이지를 자신의 입맛에 맞게 꾸며봅시다.
  • 핵심은 장고 템플릿 변수를 이용하여 출력하는 것입니다.
    제목, 작성자, 작성일, 내용을 출력하기 위해 다음과 같이 수정합니다.
{{ blog_detail.title }}

{{ blog_detail.author }}

{{ blog_detail.pub_date }}

{{ blog_detail.body | safe }}

 

 

 

 

 

적용 확인

  • 서버를 구동시킨 후, 정상적으로 작동하는지 확인합니다.
  • 이제 각 블로그의 내용은 나타나지 않습니다.

 

 

  • 블로그 글을 누르면 주소창에 [127.0.0.1:8000/blogMain/detail/4]와 같이 블로그 글 번호가 나타나고 글 내용이 보입니다.

 

 

  • 또한 제 블로그의 경우 글이 6개인데, 7번 글을 접속해보도록 합시다.
  • [http://127.0.0.1:8000/blogMain/detail/7/]처럼 주소창에 입력하고 접속하게 되면 다음과 같이 404 에러 페이지가 나타납니다.

 

 

 

댓글

댓글 본문