코딩공부/Python Django

[django 실습] 게시판 만들기 - detail page 만들기

integerJI 2020. 2. 18. 23:10

python django 게시판 만들기 - detail page 만들기


model, admin 설정 : https://integer-ji.tistory.com/89

views에 데이터 가져오기 : https://integer-ji.tistory.com/90


언제나 시작은 가상 환경 실행, 디렉터리 이동

 

 

source myvenv/Scripts/activate

cd crudproject/

 

 

 

새로운 페이지.html 생성하는 방법

html을 만들면 해야할것 3가지


1. templates 폴더 안에 html파일 만들기


2. views.py에 함수 설정하기


3. urls.py url 만들기

 

 

crudapp/templates/detail.html 만들기

 

 

 

 

views.py detail 함수 설정

 

 

from django.shortcuts import render, get_object_or_404
from .models import Blog

# Create your views here.

def home(request):
    blogs = Blog.objects
    return render(request, 'home.html', {'blogs': blogs})

def detail(request, blog_id):
    blog_detail = get_object_or_404(Blog, pk=blog_id)
    return render(request, 'detail.html', {'blog': blog_detail})

def new(request):
    full_text = request.GET['fulltext']

    word_list = full_text.split()

    word_dictionary = {}

    for word in word_list:
        if word in word_dictionary:
            # Increase
            word_dictionary[word] += 1
        else:
            # add to the dictionary
            word_dictionary[word] = 1

    return render(request, 'new.html', {'fulltext': full_text, 'total': len(word_list), 'dictionary': word_dictionary.items()} )

 

detail을 이용해 모든 게시물을 불러와야 합니다.

 

그렇다면 1번째 게시물이라면 detail/1이고 100번이라면 detail/100일 텐데

 

이걸 수동으로 입력하지 않고 pk(프라이머리 키)를 이용해 Blog의 blog_id를 가져옵니다.

 

blog_id는 글이 생기면 장고에서 저절로 부여하는 고유 번호입니다.

 

 

urls.py url 설정하기

 

 

from django.contrib import admin
from django.urls import path
import crudapp.views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', crudapp.views.home, name='home'),
    path('new/', crudapp.views.new, name='new'),
    path('detail/<int:biog_id>', crudapp.views.detail, name='detail'),
]

 

blog_id는 인자라 불리며 게시글의 고윳값, views.py에서 설정한 pk를 넘깁니다.

 

1번째 게시물을 누르면 주소는 detail/1이고 두 번째는 detail/2가 됩니다.

 

 

detail url html에 넣기

 

 

 

detail page가 잘 나오게 되었네요

 

주소창을 보면 detail/1인걸 볼 수 있습니다.

 

안에 내용을 넣어봅시다.

 

 

 

 

<h1>detail page</h1>


    <h1>{{ blog.title }}</h1>
    <p>{{ blog.pub_date }}</p>
    <p>{{ blog.body }}</p> 


    <a href="{% url 'home' %}">돌아가기</a>

 

 

 

첫 페이지도 잘 나오고

 

 

 

두번째 글도 잘 나옵니다.

 

detail 페이지에서는 blogs란 모든 blog객체를 가져오는 것이 아니기 때문에

 

해당 pk(blog_id)의 타이틀과 시간 본문만 가져오면 되는것입니다.

 

 

git push

 

 

git init

git add .

git commit -m "코멘트"

 

 

 

git push origin master

 

 

 

 

 - 끝 -

 

---

 

CRUD 프로젝트에서 R, read를 끝냈습니다.

 

다음 시간에는 게시판을 만들기 위한 좀 더 세밀한 부분을 작업하는 시간을 갖겠습니다.

 

목록 : 시간 양식 바꾸기, 정렬 바꾸기, 첫 화면에 본문 대신 요약 출력하기