# 연락처 페이지 생성 포트폴리오 사이트에 연락처 페이지가 있으면 잠재 고객, 고용주 또는 기술에 관심 있는 다른 전문가와 연결하는 데 도움이 됩니다. 이 튜토리얼 섹션에서는 Wagtail 폼을 사용하여 포트폴리오 사이트에 연락처 페이지를 추가합니다. `base/models.py` 파일을 수정하여 시작합니다: ```python from django.db import models # parentalKey 가져오기: from modelcluster.fields import ParentalKey # FieldRowPanel 및 InlinePanel 가져오기: from wagtail.admin.panels import ( FieldPanel, FieldRowPanel, InlinePanel, MultiFieldPanel, PublishingPanel, ) from wagtail.fields import RichTextField from wagtail.models import ( DraftStateMixin, PreviewableMixin, RevisionMixin, TranslatableMixin, ) # AbstractEmailForm 및 AbstractFormField 가져오기: from wagtail.contrib.forms.models import AbstractEmailForm, AbstractFormField # FormSubmissionsPanel 가져오기: from wagtail.contrib.forms.panels import FormSubmissionsPanel from wagtail.contrib.settings.models import ( BaseGenericSetting, register_setting, ) from wagtail.snippets.models import register_snippet # ...NavigationSettings 및 FooterText 정의를 유지합니다. FormField 및 FormPage를 추가합니다: class FormField(AbstractFormField): page = ParentalKey('FormPage', on_delete=models.CASCADE, related_name='form_fields') class FormPage(AbstractEmailForm): intro = RichTextField(blank=True) thank_you_text = RichTextField(blank=True) content_panels = AbstractEmailForm.content_panels + [ FormSubmissionsPanel(), FieldPanel('intro'), InlinePanel('form_fields', label="폼 필드"), FieldPanel('thank_you_text'), MultiFieldPanel([ FieldRowPanel([ FieldPanel('from_address'), FieldPanel('to_address'), ]), FieldPanel('subject'), ], "이메일"), ] ``` 이전 코드에서 `FormField` 모델은 `AbstractFormField` 에서 상속됩니다. `AbstractFormField` 를 사용하면 관리 인터페이스에서 원하는 폼 필드 유형을 정의할 수 있습니다. `page = ParentalKey('FormPage', on_delete=models.CASCADE, related_name='form_fields')` 는 `FormField` 와 `FormPage` 모델 간의 부모-자식 관계를 정의합니다. 반면에 `FormPage` 모델은 `AbstractEmailForm` 에서 상속됩니다. `AbstractFormField` 와 달리 `AbstractEmailForm` 은 폼-이메일 기능을 제공합니다. 또한 `to_address`, `from_address`, `subject` 필드를 정의합니다. `form_fields` 가 정의되어야 합니다. `FormField` 및 `FormPage` 모델을 정의한 후 `form_page` 및 `form_page_landing` 템플릿을 생성해야 합니다. `form_page` 템플릿은 일반적인 Wagtail 템플릿과 다릅니다. 일반적인 `Page` 변수 외에 Django `Form` 객체를 포함하는 `form` 이라는 변수가 전달되기 때문입니다. 반면에 `form_page_landing.html` 은 표준 Wagtail 템플릿입니다. 사용자가 폼을 성공적으로 제출하면 사이트에서 `form_page_landing.html` 을 표시합니다. 이제 `base/templates/base/form_page.html` 파일을 생성하고 다음을 추가합니다: ```html+django {% extends "base.html" %} {% load wagtailcore_tags %} {% block body_class %}template-formpage{% endblock %} {% block content %}