(wagtailsnippets_registering)= # 스니펫 등록 스니펫은 `register_snippet` 을 데코레이터 또는 함수로 사용하여 등록할 수 있습니다. 후자가 권장되지만, 데코레이터는 편의성과 하위 호환성을 위해 제공됩니다. ## 데코레이터로 `@register_snippet` 사용 스니펫은 Django 모델에 `@register_snippet` 데코레이터를 사용하여 등록할 수 있습니다. 다음은 스니펫 모델 예시입니다. ```python from django.db import models from wagtail.admin.panels import FieldPanel from wagtail.snippets.models import register_snippet # ... @register_snippet class Advert(models.Model): url = models.URLField(null=True, blank=True) text = models.CharField(max_length=255) panels = [ FieldPanel("url"), FieldPanel("text"), ] def __str__(self): return self.text ``` `Advert` 모델은 기본 Django 모델 클래스를 사용하며 `url` 및 `text` 의 두 속성을 정의합니다. 편집 인터페이스는 `Page` 파생 모델에 제공되는 인터페이스와 매우 유사하며, `panels`(또는 `edit_handler`) 속성에 필드가 할당됩니다. 추가로 구성되지 않는 한 스니펫은 여러 필드 탭을 사용하지 않으며 "초안으로 저장" 또는 "중재를 위해 제출" 기능도 제공하지 않습니다. `@register_snippet` 은 Wagtail에 모델을 스니펫으로 처리하도록 지시합니다. `panels` 목록은 스니펫 편집 페이지에 표시할 필드를 정의합니다. `def __str__(self):` 를 통해 클래스의 문자열 표현을 제공하는 것도 중요합니다. 이렇게 하면 Wagtail 관리자에 스니펫 객체가 나열될 때 의미가 있습니다. ## 함수로 `register_snippet` 사용 `@register_snippet` 데코레이터가 편리하지만, 스니펫을 등록하는 권장 방법은 [`wagtail_hooks.py`](admin_hooks) 파일에서 `register_snippet` 을 함수로 사용하는 것입니다. 예를 들어: ```python # myapp/wagtail_hooks.py from wagtail.snippets.models import register_snippet from myapp.models import Advert register_snippet(Advert) ``` 이러한 방식으로 스니펫을 등록하면 나중에 사용자 지정 {class}`~wagtail.snippets.views.snippets.SnippetViewSet` 클래스를 사용하여 추가 사용자 지정을 추가할 수 있습니다. 또한 Django 모델과 Wagtail 특정 관심사 간의 더 나은 분리를 제공합니다. 예를 들어, 모델 클래스에 `panels` 또는 `edit_handler` 를 정의하는 대신 `SnippetViewSet` 클래스에 정의할 수 있습니다. ```python # myapp/wagtail_hooks.py from wagtail.snippets.models import register_snippet from wagtail.snippets.views.snippets import SnippetViewSet from myapp.models import Advert class AdvertViewSet(SnippetViewSet): model = Advert panels = [ FieldPanel("url"), FieldPanel("text"), ] # 모델 클래스에 @register_snippet을 데코레이터로 사용하는 대신, # register_snippet을 함수로 사용하여 스니펫을 등록하고 # 사용자 지정 SnippetViewSet 서브클래스를 전달합니다. register_snippet(AdvertViewSet) ``` 패널을 더 사용자 지정하려면 {meth}`~wagtail.snippets.views.snippets.SnippetViewSet.get_edit_handler` 메서드를 재정의할 수 있습니다. 추가 사용자 지정은 [](wagtailsnippets_custom_admin_views)에서 나중에 설명합니다.