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 |
댓글