본문 바로가기
Django

Django 어플리케이션 확장하기

by nyanguk 2021. 1. 20.

이번 포스팅에서는 목록에 있는 게시물을 선택했을때 게시물의 상세 페이지가 보여지는 것을 구현 해보도록한다.

먼저 게시된 글마다 새로운 링크를 부여하는 것은 효율적이지 못하다. 하지만 게시물마다 가지고 있는 번호를 이용해 URL이 인식하도록 한다면 게시물의 제목이나 글만 바뀐 상태로 같은 페이지를 사용할 수 있을것이다.

 

게시물 상세페이지 URL생성하기

게시물 상세 페이지에 접속하여면 그 상세페이지를 띄울 URL이 필요하다 urls.py에 들어가 다음과 같이 코드를 추가해준다.

각 게시물의 상세페이지에 접근 할때 views.py의 post_detail 이라는 함수를 부르게된다.

URL은 http://127.0.0.1:8000/post/1 과 같이post/숫자 형태를 가진다.

 

# blog/urls.py
from django.urls import path
from . import views
urlpatterns = [
    path(r'', views.post_list, name='post_list'),
    path(r'post/<int:pk>/', views.post_detail, name='post_detail'),
]

views.py에 post_detail 구현하기 

URL에 접속 요청이 있을때 views.py의 post_detail이라는 함수를 부르도록 했으므로 구현해야한다.

post_list와 다른점은 pk가 포함된다는 것인데 이는 각 게시물을 구분하기 위한 숫자임을 잊지 말자

get_object_or_404()는  게시물의 번호와 pk가 일치하는 것의 쿼리셋을  post 변수에 저장한다. 만약 불러오지 못한다면 404 에러를 출력하도록 저장된다.

# blog/views.py
from django.shortcuts import render,get_object_or_404
from .models import Post
# Create your views here.
posts=Post.objects.all()
def post_list(request):
    return render(request, 'blog/post_list.html', {'posts':posts})

def post_detail(request, pk):
    post = get_object_or_404(Post,pk=pk)
    return render(request, 'blog/post_detail.html',{'post':post})

 

 

게시물 상세페이지로 이동시키기

가장 먼저 게시물의 제목을 클릭했을때 상세페이지로 이동 시키기위한 링크를 생성하자.

post_list.html 에서 <h1></h1>안의 내용을 아래와 같이 수정하자

 

<!-- blog/templates/blog/post_list.html -->
h1><a href="{% url 'post_detail' pk=post.pk %}">{{ post.title }}</a></h1>

 

게시물 상세페이지 구현하기

링크를 생성했다면 그 링크에 접속했을때 표시될 상세페이지를 구현해보자 

post_detail.htmlblog/templates/blog/ 아래에 생성하고 아래와 같이 작성한다.

 

<!-- blog/templates/blog/post_detail.py-->
{% extends 'blog/base.html' %}

{% block content %}
    <div class="post">
        {% if post.created_date %}
            <div class="date">
                {{ post.created_date }}
            </div>
        {% endif %}
        <h1>{{ post.title }}</h1>
        <p>{{ post.text|linebreaksbr }}</p>
    </div>
{% endblock %}

템플릿 확장에서도 알 수 있듯이 base.html에 생성된 블록 위치에 어느 블록이던지 구현만 한다면 그것을 기본html로 하여 무엇이던 교체하여 표현할 수 있다.

모델에서 기본키를 지정하지 않았기 때문에 장고는 pk라는 필드를 추가해 새로운 블로그 게시물이 추가될 때마다 그 값이 1,2,3 등으로 증가하게 되며 객체.pk 로 값을 가져올수 있다

'Django' 카테고리의 다른 글

Django form만들기  (0) 2021.01.21
Django field 정리  (0) 2021.01.21
Django 템플릿 확장하기  (0) 2021.01.20
Django 부트스트랩  (0) 2021.01.19
Django 템플릿  (0) 2021.01.19