DEV/Django

[Django] Django에서 Slug란?

Slug?


"Slug"는 일반적으로 이미 얻은 데이터를 사용하여 유효한 URL을 생성하는 방법이다. 예를 들어, Slug는 기사 제목을 사용하여 URL을 생성한다. 수동으로 설정하는 대신 제목 (혹은 다른 데이터)가 주어지면 함수를 통해 슬러그를 생성하는게 좋다.

example:

<title> The 46 Year Old Virgin </title>
<content> A silly comedy movie </content>
<slug> the-46-year-old-virgin </slug>

다음과 같은 Django Model이 있다고 가정

class Article(models.Model):
    title = models.CharField(max_length=100)
    content = models.TextField(max_length=1000)
    slug = models.SlugField(max_length=40)

URL의미있는 이름을 사용하여 이 개체를 어떻게 참조할 수 있을까?

일반적으로 Article.id를 사용할 수 있으므로 URL은 다음과 같다.

www.example.com/article/13

혹은 다음과 같이 Article.title을 참조할 수있다.

www.example.com/article/The 46 Year Old Virgin

하지만, URL에서는 공백이 유효하지 않으므로 공백을 %20으로 대체해야하며 결과는 다음과 같다.

www.example.com/article/The%2046%20Year%20Old%20Virgin

위 2가지 시도는 모두 의미 있고 읽기 쉬운 URL이 아니다.

Slug를 사용한 URL은 다음과 같이 생성될 수 있다.

www.example.com/article/the-46-year-old-virgin

위의 예시에서 the-46-year-old-virgin이 Slug이다. 모든 문자를 down-casing하고 공백을 hypen(-)으로 대체하여 제목에서 생성된다.

하지만, Slug는 단일성(Uniqueness)를 보장하지 않기때문에 다음과 같이 URL을 사용하는게 현명하다.

www.example.com/article/23/the-46-year-old-virgin

Slug in Django


Slug를 설정할때 보통 Model의 title 혹은 Category와 mapping을 많이해서 사용한다.

위의 snippet는 내가 개발중인 Django website의 Slug를 사용한 모델이고, admin site에서 post를 추가할 경우 자동적으로 Category명과 auto mapping이 될 수 있는 code도 설정하였다.

Ref

https://stackoverflow.com/questions/427102/what-is-a-slug-in-django