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
- git
- PWA
- SSAFY
- db
- pwa적용하기
- 싸피
- 리액트
- Django
- react
- Python
- SQL
- TypeScript
- queryset
- Javascript
- 싸피10기
- VITE
- unionfind
- SSAFYcial
- sqld
- 14658
- 머신러닝종류
- 데코레이터
- 플로이드워셜
- vitepwa
- 셀프넘버
- 싸피셜
- 알고리즘
- 백준
- QuerySetAPI
- js
Archives
- Today
- Total
Meme's IT
[Django] 게시판 만들기 - 수정 본문
https://memezz.tistory.com/23과 이어집니다.
수정을 구현하기 위해서 필요한 view함수의 갯수 = 2개
- 사용자 입력 데이터를 받을 페이지를 렌더링하는 edit함수
- 사용자가 입력한 데이터를 받아 DB에 저장하는 update함수
# edit함수
1. urls.py에서 경로 추가해주기
from django.urls import path
from . import views
urlpatterns = [
# 전체 게시글 조회
path('', views.index, name='index'),
# 단일 게시글 조회
path('<int:pk>/', views.detail, name='detail'),
# 게시글 새로 쓰기
path('new/',views.new, name='new'),
path('create/', views.create, name='create'),
# 지우기
path('<int:pk>/delete/',views.delete, name='delete'),
# 수정하기
path('<int:pk>/edit' , views.edit, name="edit"),
path('<int:pk>/update/', views.update, name="update")
]
2. views.py에 edit함수 작성해주기
def edit(request,pk):
article = Article.objects.get(pk=pk)
context = {
'article' : article
}
return render(request, 'articles/edit.html', context)
pk를 받아와서 각각의 pk에 해당하는 데이터를 수정해줌
3. Templates/articles에 edit.html을 추가, 작성해주기
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<form action="{% url "update" article.pk %}" method="POST">
{% csrf_token %}
<div>
<label for="title">제목: </label>
<input type="text" name="title" id="title" value={{article.title}}>
</div>
<div>
<label for="content">내용: </label>
<textarea name="content" id="content">{{article.content}}</textarea>
</div>
<input type="submit" value="수정하기">
</form>
</body>
</html>
- form의 action에 update를 호출하는 url 태그를 달아주기
- method는 POST + scrf token추가해주기
- 수정에는 글을 쓰는 박스에 원래 있던 내용이 써져있어야 하므로, title에는 value로 원래 제목을 넣어주고
- 본문도 원래 본문을 추가해주는데, textarea는 value를 지원하지 않으므로 tag사이에 넣어주면 된다.
# update함수
# views.py
def update(request, pk):
article= Article.objects.get(pk=pk)
article.title = request.POST.get('title')
article.content = request.POST.get('content')
article.save() # 저장해주기
return redirect('detail', article.pk)
redirect로 수정이 완료된 detial 페이지로 넘어가도록 해줌
# Detail 페이지 수정
detail.html을 수정해서 수정하기 버튼을 추가해준다.
/% detail의 body부분 %/
<h2>Detail</h2>
<h3>{{article.pk}}번째 글</h3>
<hr>
<p>제목: {{article.title}}</p>
<p>내용: {{article.content}}</p>
<hr>
<form action="{% url "delete" article.pk %}" method="POST">
{% csrf_token %}
<input type="submit" value="지우기">
</form>
<form action="{% url "edit" article.pk %}" method="POST">
{% csrf_token %}
<input type="submit" value="수정하기">
</form>
<a href="{% url "index" %}">뒤로가기</a>
수정하기를 누르면 edit로 넘어감
원래의 내용과 함께 수정할 수 있음
글을 수정하고 수정하기 버튼을 누르면
수정된 내용과 함께 Detail 페이지로 넘어감
'BackEnd > Django' 카테고리의 다른 글
[Django] Form (0) | 2023.09.27 |
---|---|
[Django] HTTP request methods (0) | 2023.09.26 |
[Django] 게시판 만들기 - 삭제 (0) | 2023.09.26 |
[Django] 게시판 만들기 - 글 작성 (0) | 2023.09.26 |
[Django] 게시판 만들기 - 조회 (0) | 2023.09.26 |