Django – resolve_url, reverse 코드 예제
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 용례가 잘 설명되어 있다.