본문 바로가기
Django

Django 임시 저장한 글 불러오기

by nyanguk 2021. 1. 23.

이번에는 튜토리얼이 아니라 내가 직접 하나의 기능을 구현해보기로 한다! 그전에 블로그 재정비가 살짝 이뤄졌다

튜토리얼에서 사용했던 post_edit.html 을 post_new.html로 바꿔주고 바뀐 파일 명에 따라 blog/views.py의 render 함수를 바꿔주기만 하면 된다.

 

오늘하고자 하는 것은 임시저장한 글을 불러오고 이어서 쓸수 있도록 하는것이다. 그렇다면 구현해야할 것을 적어보자

  • 임시저장한 글에서 수정하기 버튼 추가
  • url추가
  • 이어쓰기 버튼을 누르면 임시저장된 글을 수정할 수 있는 페이지로 이동
  • save를 누르면 다시 임시저장 (publish 버튼이 있으므로!)

 

수정하기 버튼 추가

임시저장된 글에서 수정 할수 있어야 하므로 post_detail.html에 아래코드를 넣어 Edit 버튼을 추가해야한다.

이때 pk값을 전달해야하는 이유는 수정을 통해 임시저장된 글을 불어와야하므로 해당 게시글의 pk값이 필요하기 때문이다.

<a class="btn btn-default" href="{% url 'post_edit' pk=post.pk %}">Edit</a>

 

URL 추가

post_edit를 name으로 가지는 URL을 생성해준다.

   path(r'^posst/(?P<pk>\d+)/edit/$', views.post_edit,name='post_edit')

 

views.py에 post_edit 추가

post_new 함수와 매우 비슷하지만 먼저 post_edit에 전달인자에 pk가 포함된다는 점과 이 pk를 이용해 임시저장된 게시글의 필드값들을 가져오기 위해 get_object_or_404() 가 필요하다는 점이 다르다

입력 form 에 임시저장된 게시글의 데이터들을 불러오려면 단순하게 PostFrom 객체를 생성할때 instance로 pk로 얻어온 게시물 객체를 전달 하면된다.

오브젝트를 가져오기 위해 Post.objects.get(pk=pk)를 사용할 수도 있음을 알았다. 그런데 이 경우에는 404 에러 페이지를 반환하지 않는 것같다....?
def post_edit(request,pk):
    post = get_object_or_404(Post, pk=pk)   # 이전 게시글 받아오기
    if request.method == "POST":        # 데이터를 저장해야할때
        form = PostForm(request.POST)
        if form.is_valid():
            edit = form.save(commit=False)  # 바로저장 X
            edit.author = request.user
            # post.published_date = timezone.now()
            post.save()                     # 바로저장 O
            return redirect('post_detail', pk=post.pk)
    else:                               # 입력 양식을 보여줘야 할때 
        form = PostForm(instance = post)
    return render(request, 'blog/post_edit.html', {'form': form})

'Django' 카테고리의 다른 글

Django 어플리케이션마다 URL분리하기  (0) 2021.01.25
Django signup/login/logout 구현  (0) 2021.01.24
Django 임시저장 및 발행, 삭제  (0) 2021.01.22
Django form만들기  (0) 2021.01.21
Django field 정리  (0) 2021.01.21