Django - resolve_url, reverse 코드 예제

Django - resolve_url, reverse 코드 예제
Photo by Pierre Binet / Unsplash

modal 창을 띄워서 UpdateView, CreateView 를 처리하고 난 다음 success_url의 경우 호출한 detail 화면으로 보내는 것이 일반적이다.

그럼 detail url 을 success_url 로 리턴할 수 있어야 한다. get_success_url() 을 overriding 해준다.

간단하게 resolve_url() 함수를 쓰면, path parameter 도 같이 처리할 수 있다. 작성한 코드 조각을 남겨둔다.

urls.py 파일에는,

    path("orderitem/<int:pk>", orderitem_view, name="orderitem_view"),

이렇게 되어 있는 url 로 돌아가고 싶다고 가정하면, 아래 처럼 path parameter 를 주면 된다.

class OrderItemWorklineUpdateView(BSModalUpdateView):
    model = OrderItem
    template_name = "_modal_update.html"
    form_class = OrderItemWorklineForm
    success_message = "변경완료"
    # success_url = reverse_lazy('orderitem_list')
    def get_success_url(self):
        print("OrderItemWorklineUpdateView get_success_url override", self.object)
        redirect_url = resolve_url("orderitem_view", pk=self.object.id)
        return redirect_url
  • self.object.id - UpdateView 의 넘겨진 object 는 self.object 에 이미 저장되어 있다.
  • resolve_url 리턴값은 스트링이다.

참고 페이지

아래 링크는 자세히 읽어 보는 게 좋다. reverse, redirect, resolve_url, get_absolute_url 용례가 잘 설명되어 있다.

URL Reverse, 아는 사람은 꼭 쓴다는 get_absolute_url() · 초보몽키의 개발공부로그