Django 모델에 표준 URL 사용하기

Kangjik Kim·2025년 1월 23일
0

웹사이트에는 동일한 컨텐츠를 표시하는 다른 페이지가 있을 수 있다.

현재까지 만든 블로그에선 각 게시물의 일부 컨텐츠 정보는 게시글 목록 페이지와 게시글 상세 페이지 둘 다에서 표시된다.

표준 URL은 리소스에 대한 기본 URL로 특정 컨텐츠의 가장 대표적인 페이지 URL이라 생각하면 된다.

사이트에서 게시글을 표시하는 서로 다른 페이지가 존재할 수 있지만, 게시글의 기본 URL로 사용하는 URL은 하나이다.

표준 URL을 사용할 경우 페이지의 마스터 사본에 대한 URL을 지정할 수 있다.

쟝고의 경우 get_absolute_url() 메서드를 구현해 객체의 표준 URL을 반환할 수 있다.

애플리케이션의 URL 패턴에 정의된 post_detail URL을 사용해 Post 객체에 대한 표준 URL을 만들어 보자.

쟝고는 URL 이름과 필요한 매개 변수를 사용해 동적으로 URL을 작성할 수 있는 URL 해석 기능을 제공한다.

우리는 django.urls 모듈의 reverse() 함수를 사용할 것이다.

아래와 같이 blog 애플리케이션의 models.py 파일을 편집해 reverse() 함수를 import하고 get_absolute_url() 메서드를 Post 모델에 추가한다.

from django.urls import reverse

class Post(models.Model):

	# ...
	
	def get_absolute_url(self):
        return reverse("blog:post_detail", args=[self.id])

reverse() 함수는 URL 패턴에 정의된 URL 이름을 사용해 URL을 동적으로 만든다.

blog 네임스페이스 뒤에 콜론과 URL 이름 post_details을 사용했다.

이 URL에는 조회할 블로그 게시글의 id인 필수 매개 변수가 있다.

args=[self.id] 를 사용해서 Post 객체의 id를 위치 인자로 포함했다.

게시글 상세 템플릿의 URL을 get_absolute_url() 메서드로 교체해 보자.

blog/post/list.html 파일을 편집해 다음 줄을 변경해보자.

<a href="{% url 'blog:post_detail' post.id %}">
<a href="{{post.get_absolute_url}}">

이제 템플릿에서 post.get_absolute_url을 호출하면 게시글의 표준 URL을 얻을 수 있다. 이렇게 표준 URL을 사용하면 코드의 가독성이 향상되고 URL 패턴이 변경되더라도 템플릿을 수정할 필요가 없다.

0개의 댓글