Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 | 31 |
Tags
- react
- QuerySetAPI
- unionfind
- SSAFYcial
- Django
- PWA
- git
- js
- 싸피셜
- db
- sqld
- 알고리즘
- VITE
- 백준
- SSAFY
- queryset
- SQL
- TypeScript
- 싸피10기
- Javascript
- 리액트
- 머신러닝종류
- vitepwa
- 데코레이터
- Python
- 14658
- 싸피
- 셀프넘버
- pwa적용하기
- 플로이드워셜
Archives
- Today
- Total
Meme's IT
[Django] 게시판 만들기 - 조회 본문
앞서, 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 |