최대 1 분 소요

django get_absolute_url


장고에서 URL reverse 기능을 제대로 사용할 수 있는 get_absolute_url 기능을 알아보자.


기능


보통 view나 template 안에서 모델 인스턴스를 통해 특정 페이지로 리다이렉트 하기 위해 사용된다.


작동 원리


  1. 외부에서 URL Reverse로 모델 인스턴스를 전달한다.
  2. 모델 인스턴스를 받게 되면 URL Reverse(reverse())에 정의된 대로 해당 모델 클래스에 선언된 get_absolute_url 을 참고한다.
  3. get_absolute_url 함수가 실행되며 내부에서 정의된 path name 을 통해 정해둔 url 맵핑을 참고하여 해당 페이지로 이동한다.


사용법


models.py


class Post(models.Model):
    author = models.ForeignKey(settings.AUTH_USER_MODEL,
                               on_delete=models.CASCADE)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)


    def get_absolute_url(self):
        return reverse("appname:post_detail", args=[self.pk])


적용하고 싶은 모델 내부에 인스턴스 함수로서 만들어준다.


view에서 redirect를 통해 사용하는 경우



def testview(request):
    post=Post.objects.get(pk=1)
    return redirect(post)


위 코드처럼 모델의 인스턴스를 전달하게 되면 자동으로 get_absolute_url 함수를 호출하여 원하는 페이지로 이동할 수 있다.


template 에서 사용


<a href="">포스트 디테일</a>


template에서도 편하게 해당 모델의 인스턴스를 이용하여 직접 get_absolute_url에 접근하는 방식으로 사용 가능하다.

댓글남기기