Meme's IT

[Django] 게시판 만들기 - 조회 본문

BackEnd/Django

[Django] 게시판 만들기 - 조회

Memez 2023. 9. 26. 14:35

앞서, Django shell에서 했던 QuerySet API를 view함수에서도 사용할 수 있다.

 

 

# 조회

- 전체 게시글 조회

게시판의 글을 한번에 볼 수 있는 index페이지 구현해보기

 

1. url 경로부터 생성, 편한 url이동을 위해 name을 붙여준다.

# project/urls.py

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('articles/', include('articles.urls')),
]
# articles/urls.py (생성해야함)

from django.urls import path
from . import views

urlpatterns = [
    # 전체 게시글 조회
    path('', views.index, name='index'),
]

 

2. model을 생성해준다.

# articles/models.py

from django.db import models

class Article(models.Model):
    title = models.CharField(max_length=10)
    content = models.TextField()
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

migrate도 진행해 준다.

python manage.py makemigrations

python manage.py migrate

3. veiws.py에서 index함수를 추가해준다.

# articles/views.py

from django.shortcuts import render, redirect
from .models import Article

def index(request):
    articles = Article.objects.all()
    context = {
        'articles' : articles,
    }
    return render(request, 'articles/index.html', context)

4. articles/Template/articles 의 위치에 index.html을 생성, 작성해준다.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>메인페이지</title>
</head>
<body>
    <h1>Articles</h1>
    <hr>
    {% for article in articles %}
        <p>글 번호: {{article.pk}}</p>
        <p>글 제목: {{article.title}}</p>
        <hr>
    {% endfor %}
</body>
</html>

이후, 서버에서 확인해보면 다음과 같이 전체 글을 조회할 수 있다.(미리 글을 admin페이지나 shell_plus를 이용해서 추가해놨음)

 


- 단일 게시글 조회

전체 게시글에서 글을 선택하면 단일 게시글을 확인할 수 있는 detail 페이지 생성해보기

 

1. urls.py에서 path 생성해주기

각 글마다 다른 내용을 포함해야하기 때문에 Variable Routing을 이용

# articles/urls.py

from django.urls import path
from . import views

urlpatterns = [
    # 전체 게시글 조회
    path('', views.index, name='index'),
    # 단일 게시글 조회
    path('<int:pk>/', views.detail, name='detail'),
]

2. views.py에 detail함수 추가

def detail(request, pk):
    article = Article.objects.get(pk = pk)
    context = {
        'article' : article,
    }
    return render(request, 'articles/detail.html', context)

함수의 매개변수로 pk도 받아줌

get을 이용해 pk가 url에서 받아온 pk인 object를 가져옴

 

3. HTML 파일 추가

Template/article의 위치에 detail.html을 생성, 작성해준다.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>detail</title>
</head>
<body>
    <h2>Detail</h2>
    <h3>{{article.pk}}번째 글</h3>
    <hr>
    <p>제목: {{article.title}}</p>
    <p>내용: {{article.content}}</p>
    <a href="{% url "index" %}">뒤로가기</a>
</body>
</html>

다시 전체 글 페이지로 돌아갈 수 있는 뒤로가기까지 만들어 주기

 

4. 전체 글에서 각각의 글로 들어갈 수 있도록 링크 걸어주기

index.html에서 글 링크 걸어주기

<h1>Articles</h1>
<hr>
{% for article in articles %}
    <p>글 번호: {{article.pk}}</p>
    <p>글 제목: <a href="{% url "detail" article.pk %}">{{article.title}}</a></p>
    <hr>
{% endfor %}

body부분을 다음과 같이 링크를 추가해준다. url mapping을 해준다.

 

 

 

다음과 같이 각각의 글 제목에 링크가 생김

클릭하면 detail page로 넘어간다.

 

Detail에서 제목과 내용을 확인할 수 있고

뒤로가기 버튼으로 index로 돌아갈 수 있다.

'BackEnd > Django' 카테고리의 다른 글

[Django] 게시판 만들기 - 삭제  (0) 2023.09.26
[Django] 게시판 만들기 - 글 작성  (0) 2023.09.26
[Django] QuerySet API 사용해보기  (0) 2023.09.15
[Django] ORM과 QuerySet API  (0) 2023.09.15
[Django] Admin Site  (0) 2023.09.14