장고의 "슬러그"는 무엇입니까?


588

장고 코드를 읽을 때 종종 모델에서 "슬러그"라고 불리는 것을 볼 수 있습니다. 이것이 무엇인지 잘 모르겠지만 URL과 관련이 있다는 것을 알고 있습니다. 이 슬러그는 언제 어떻게 사용됩니까?

( 이 용어집 에서 그 정의를 읽었습니다 .)

답변:


752

"슬러그"는 일반적으로 이미 얻은 데이터를 사용하여 유효한 URL을 생성하는 방법입니다. 예를 들어, 슬러그는 기사 제목을 사용하여 URL을 생성합니다. 슬러그를 수동으로 설정하는 대신 제목 (또는 다른 데이터)이 주어진 함수를 사용하여 슬러그를 생성하는 것이 좋습니다.

예를 들면 :

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

이제 다음과 같은 장고 모델이 있다고 가정 해 봅시다.

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/23

또는 다음과 같이 제목을 참조 할 수 있습니다.

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

공백은 URL에서 유효하지 않으므로 공백으로 대체해야합니다 %20.

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

두 가지 시도 모두 매우 의미 있고 읽기 쉬운 URL이 아닙니다. 이게 낫다:

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

이 예에서는 the-46-year-old-virgin 슬러그입니다. 제목은 모든 문자를 소문자로 묶고 공백을 하이픈으로 대체하여 생성합니다 -.

또 다른 예는이 웹 페이지의 URL을 참조하십시오.


72
SlugField는 독창성을 보장하지 않으므로 기본적으로 사용하는 경우 더 나은 URL입니다. www.example.com/article/the-40-year-old-virgin/23 / 여기서 '23'은 article.id이며 실제로 쿼리를 수행하는 데 사용되는 것입니다 (슬러그 쿼리보다 빠름).
Daniel Naab

126
www.example.com/article/23/the-40 세의 처녀를 더 쉽게 읽을 수 있습니다.
MiniQuark

16
ID를 기반으로 콘텐츠를 제공하는 경우 슬러그가 콘텐츠와 일치하는지 확인하고 (아니면 404를 반환) 완전히 무시할지 여부를 결정합니다. SEO 측면에서 가장 좋은 것에 대한 일반적인 규칙이 없다고 생각합니다. 브라우저에 stackoverflow.com/questions/427102/… 를 입력해도 SO는 여전히이 페이지를 표시 합니다.
Tomas Andrle

2
@Daniel 슬러그도 실제 데이터베이스 ID를 숨기므로 슬러그 사용의 장점을 극복 할 수 있습니다.
Eno

15
@Eno the slug는 SEO 및 permalink nicey-ness를 위해 추가되었습니다. ID는 색인 조회에 사용됩니다. stackoverflow의 SEO는 훌륭합니다. 정확하게이 전략을 사용합니다. 귀하의 주장은 "데이터베이스 ID 숨기기"이며, 이제 "SEO"로 설정되었습니다. 무슨 일이야?
Josh Smeaton

134

역사적인 맥락을 제시한다면 :

"슬러그" 라는 용어 는 프레스 글꼴이 만들어진 금속 주조 (이 경우에는 납)와 관련이 있습니다. 그런 다음 모든 용지는 글꼴 공장에서 정기적으로 재 용융하고 새로운 금형으로 다시 인쇄했습니다. 저와 같은 견습생들은 그곳에서 경력을 시작했고 더 이상은 아닙니다.

타이포 그래프는 기사의 텍스트를 역으로 작성하여 리드 문자를 현명하게 쌓아야했습니다. 따라서 인쇄시 글자가 용지에 똑바로 나타납니다. 모든 타이포 그래프는 인쇄 된 신문만큼 빠르게 신문을 읽을 수있었습니다. 따라서 달팽이와 같은 슬러그도 느린 이야기 (마지막으로 고쳐야 할 이야기)는 벤치 대기 중 많은 사람들이 있었으며 주먹 문자로만 식별되었습니다. 대부분 전체 제목이 일반적으로 더 읽기 쉽습니다. 마지막 조립과 결정적인 인쇄를하기 전에 마지막 순간 수정 (저녁 종이)을 얻기 위해 벤치에서 일부 "핫"뉴스가 기다리고있었습니다.

장고는 캔자스에있는 로렌스 저널의 사무실에서 나왔습니다. 아마도 일부 인쇄 전문 용어가 여전히 남아있는 곳입니다. 프랑스에서 온 장고 열정적이고 친근한 슬러그 소년.


61

'슬러그'라는 용어는 신문 제작 세계에서 비롯된 것입니다.

제작 과정에서 이야기에 부여되는 비공식적 인 이름입니다. 스토리가 비트 리포터에서 ( 더 이상 존재 한다고 가정 할 때 ) 편집자에서 "인쇄기"까지의 경로를 따라갈 때이 이름은 "프린터에서 오류를 수정 했습니까? 케이트 앤 윌리엄의 이야기? "

Django와 같은 일부 시스템은 슬러그를 URL의 일부로 사용하여 스토리를 찾습니다 (예 :) www.mysite.com/archives/kate-and-william.

스택 오버플로 자체조차도 GEB-ish (a) 자체 참조 로이 작업을 수행 /programming/427102/what-is-a-slug-in-django/427201#427201하지만 슬러그를 교체 할 수 blahblah는 있지만 여전히 괜찮습니다.

각 장면의 시작 부분에 각본마다 "슬러그 라인 (slug line)"이 있었기 때문에 기본적으로 해당 장면의 배경 (어디, 언제 등)을 설정하기 때문에 그보다 더 오래된 날짜 일 수도 있습니다. 그것은 다음에 오는 것의 정확한 또는 서문이라는 점에서 매우 유사합니다.

Linotype 기계에서 슬러그는 개별 문자 형태로 만들어진 단일 선 조각의 금속이었습니다. 전체 라인에 단일 슬러그를 만들면 기존 문자 별 합성에서 크게 향상되었습니다.

다음은 순수한 추측이지만, 슬러그의 초기 의미는 위조 동전 (어쨌든 눌러야 함)에 대한 것이 었습니다. 나는 슬러그를 원래 문자를 사용하여 눌러야했기 때문에 사용법이 인쇄 용어로 변환되어 '금속 조각'정의에서 '스토리 요약'정의로 바뀌는 것을 상상할 수 있습니다. 거기에서 올바른 인쇄에서 온라인 세계로의 짧은 단계입니다.


(a) Douglas Hofstadter가 쓴 "Godel Escher, Bach" . 그의 다른 작품 인 "Metamagical Themas"도 확인해야합니다.


29

슬러그는 신문 용어입니다. 슬러그는 문자, 숫자, 밑줄 또는 하이픈 만 포함 된 무언가를위한 짧은 레이블입니다. 일반적으로 URL에서 사용됩니다. (장고 문서에서와 같이)

Django의 슬러그 필드는 동적으로 생성 된 웹 페이지에 유효한 URL 을 저장하고 생성하는 데 사용됩니다 .

Stack Overflow에서이 질문을 추가하고 동적 페이지가 생성 된 방식과 마찬가지로 주소 표시 줄에 공백이 "-"인 질문 제목이 표시됩니다. 그것은 정확히 슬러그 필드의 일입니다.

여기에 이미지 설명을 입력하십시오

귀하가 입력 한 제목은 다음과 같습니다.-> Django의 "슬러그"는 무엇입니까?

슬러그 필드에 저장하면 "What-is-a-slug-in-django"가됩니다 (이 페이지의 URL 참조).


27

에서 여기 .

"슬러그"는 신문 용어이지만 여기서 의미하는 것은 URL의 마지막 비트입니다. 예를 들어 제목이 "Django에 대한 비트"인 게시물은 자동으로 "bit-about-django"가됩니다 (물론 자동 생성 된 슬러그가 마음에 들지 않으면 쉽게 변경할 수 있습니다).



17

슬러그는 특정 콘텐츠에 대한 URL 친화적 인 짧은 레이블입니다. 문자, 숫자, 밑줄 또는 하이픈 만 포함합니다. 슬러그는 일반적으로 각 컨텐츠와 함께 저장되며 URL 문자열로 전달됩니다.

슬러그는 SlugField를 사용하여 만들 수 있습니다

전의:

class Article(models.Model):
    title = models.CharField(max_length=100)
    slug = models.SlugField(max_length=100)

제목을 슬러그로 사용하려면 django에는 slugify

from django.template.defaultfilters import slugify

class Article(models.Model):
    title = models.CharField(max_length=100)

    def slug(self):
        return slugify(self.title)

독창성이 필요한 경우 unique=True슬러그 필드에 추가하십시오 .

예를 들어 이전 예제에서

class Article(models.Model):
    title = models.CharField(max_length=100)
    slug = models.SlugField(max_length=100, unique=True)

슬러그 프로세스를 수행하는 게으른가요? 걱정하지 마세요.이 플러그인이 도움이 될 것입니다. 장고 오토 슬러그


8

django-admin에서 자동 슬러그. ModelAdmin에 추가됨 :

prepopulated_fields = {'slug': ('title', )}

여기에서와 같이 :

class ArticleAdmin(admin.ModelAdmin):
    list_display = ('title', 'slug')
    search_fields = ('content', )

    prepopulated_fields = {'slug': ('title', )}

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.