[ Python ] Django로 웹 서비스 개발하기 ( 11. detail page 만들기 및 완성 )

peter_yun
5 min readFeb 27, 2017

--

장고로 시작하는 2017년

본 글은 코드스쿼드가 진행하는 인프런의 장고 강의를 바탕으로 함
(참고 : http://bit.ly/2jE3ARl )

detail.html 만들기

본 포스팅은 form과 post처리에 이은 detail page 만들기 포스팅입니다. 각 게시글의 내용을 볼 수 있는 detail page를 만들어 보겠습니다.

(urls.py) 우선 url을 추가합니다. url을 추가한 후에는 detail 메소드를 정의해 주어야겠죠? ▼

(수정) detail/$로 수정합니다.

(views.py) views.py에 detail 메소드를 정의해주고, templates에 html 파일을 만들어줍니다. http://127.0.0.1:8000/lotto/22/detail/ 이런 식의 url에 접속하면 빈 html 파일로 접속이 됨을 확인할 수 있습니다. ▼

views.py에 detail 메소드 정의하기
detail.html 파일 만들기
접속하면 빈 html이 나온다.

detail.html url로 parameter 넘겨주기

(urls.py -> views.py) 이제 url의 숫자 부분을 lottokey라는 이름의 파라미터로 받아서 view단에 전달하고자 아래와 같이 url을 수정하였습니다. ▼

(views.py -> detail.html) lottokey를 pk로 갖는 오브젝트들을 lotto 변수에 할당합니다. 그리고 dictionary 오브젝트 형태로 template으로 넘겨줍니다. ▼

(detail.html 수정) 이제 detail.html에서 어떤 정보들을 보여줄지 수정하여 아래와 같이 작성하였습니다. ▼

<!DOCTYPE html>
{% load staticfiles %}
<html lang="ko">
<head>
<title>My Little Lotto</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
<link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap-theme.min.css">
<link href="//fonts.googleapis.com/css?family=Space+Mono" rel="stylesheet">
<link rel="stylesheet" href="{% static 'css/lotto.css'%}">
</head>

<body>
<div class="page-header">
<h1>My Lotto Page</h1>
</div>
<div class="container lotto">
<h2>{{lotto.text}}</h2>
<p> by {{lotto.name}}</p>
<p> {{lotto.update_date}}</p>
<p> {{lotto.lottos|linebreaksbr}}</p>
</div>
</body>
</html>

(결과) 결과는 정상적인 경우와 오류 페이지가 뜨는 경우가 있습니다. 오류가 뜨는 경우는 pk가 2인 오브젝트가 삭제됬을 경우 입니다. 1,2,3,4의 오브젝트가 있을 때 2번 오브젝트가 삭제되면 3번 오브젝트는 그대로 pk값으로 3을 갖고 pk=2인 오브젝트는 null 값이 됩니다. ▼

new_lotto, detail template 합치기

마지막으로 head 부분에 버튼을 추가하여 new_lotto.html과 연결하고, body의 제목 부분에 detail 페이지와 연결하여 템플릿들을 하나의 앱으로 통합하였습니다. ▼

완성 페이지

이것으로 장고로 만드는 첫번째 웹 어플리케이션을 완성해보았습니다. 이번 튜토리얼을 바탕으로 새로운 웹 어플리케이션을 만들어 볼 예정입니다.


다른 글 보러 가기

--

--