문서 개요

이 페이지는 Wagtail 프로젝트에서 'wagtail.documents' 앱을 사용하는 기본 사항에 대한 개요를 제공합니다.

INSTALLED_APPS'wagtail.documents' 포함

wagtail.documents 앱을 사용하려면 Django 프로젝트 설정의 INSTALLED_APPS 목록에 포함해야 합니다. 다음과 같이 목록에 추가하기만 하면 됩니다.

# settings.py

INSTALLED_APPS = [
    # ...
    'wagtail.documents',
    # ...
]

URL 설정

다음으로 wagtail.documents 앱에 대한 URL을 설정해야 합니다. 이 URL을 프로젝트의 기본 urls.py 파일에 포함할 수 있습니다. 이렇게 하려면 다음 줄을 추가하십시오.

# urls.py

from wagtail.documents import urls as wagtaildocs_urls

urlpatterns = [
    # ...
    path('documents/', include(wagtaildocs_urls)),
    # ...
]

새로 저장된 문서는 기본적으로 참조 인덱스에 저장됩니다.

페이지에서 문서 사용

Wagtail 페이지에 문서 파일을 포함하려면 페이지 모델에서 FieldPanel 을 사용할 수 있습니다.

다음은 예시입니다.

# models.py

from wagtail.admin.panels import FieldPanel
from wagtail.documents import get_document_model


class YourPage(Page):
    # ...
    document = models.ForeignKey(
        get_document_model(),
        null=True,
        blank=True,
        on_delete=models.SET_NULL,
    )

    content_panels = Page.content_panels + [
        # ...
        FieldPanel('document'),
    ]

이를 통해 페이지를 생성하거나 편집할 때 문서 파일을 선택하고 페이지 템플릿에서 링크할 수 있습니다.

다음은 문서 필드에 액세스하고 렌더링하는 예제 템플릿입니다.

{% extends "base.html" %}
{% block content %}
    {% if page.document %}
        <h2>문서: {{ page.document.title }}</h2>
        <p>파일 유형: {{ page.document.file_extension }}</p>
        <a href="{{ page.document.url }}" target="_blank">문서 보기</a>
    {% else %}
        <p>이 페이지에 첨부된 문서가 없습니다.</p>
    {% endif %}
    <div>{{ page.body }}</div>
{% endblock %}

RichTextFields 내에서 문서 사용

문서 링크는 RichTextField를 사용하여 페이지에서 만들 수 있습니다. 기본적으로 Wagtail은 문서에 링크를 추가하는 기능을 포함합니다. 서식 있는 텍스트 필드의 기능 제한를 참조하십시오.

featuresRichTextField 에 전달하여 이를 제외하거나 포함할 수 있습니다. 아래 예제에서는 문서와 기본 서식만 포함하는 RichTextField 를 생성합니다.

# models.py
from wagtail.fields import RichTextField

class BlogPage(Page):
    # ...다른 필드
    document_footnotes = RichTextField(
        blank=True,
        features=["bold", "italic", "ol", "document-link"]
    )

    panels = [
        # ...다른 패널
        FieldPanel("document_footnotes"),
    ]

StreamField 내에서 문서 사용

StreamField 는 고정된 구조를 따르지 않는 페이지에 적합한 콘텐츠 편집 모델을 제공합니다. StreamField 를 사용하여 문서에 링크를 추가하려면 모델에 포함하고 DocumentChooserBlock 도 포함하십시오.

doc 이라는 StreamField 와 필드 내에 doc_link 라는 DocumentChooserBlock 이 있는 Page 모델을 생성합니다.

# models.py

from wagtail.fields import StreamField
from wagtail.documents.blocks import DocumentChooserBlock


class BlogPage(Page):
    # ... 다른 필드

    documents = StreamField([
            ('document', DocumentChooserBlock())
        ],
        null=True,
        blank=True,
        use_json_field=True,
    )

    panels = [
        # ... 다른 패널
        FieldPanel("documents"),
    ]

In blog_page.html, add the following block of code to display the document link in the page:

{% for block in page.documents %}
    <a href="{{ block.value.url }}">{{ block.value.title }}</a>
{% endfor %}

문서 및 컬렉션 작업

Wagtail의 문서는 컬렉션 내에서 구성할 수 있습니다. 컬렉션은 관련 문서를 그룹화하는 방법을 제공합니다. 컬렉션 간에 문서를 교차 연결하고 사이트의 다른 부분을 통해 액세스할 수 있습니다.

다음은 예시입니다.

from wagtail.documents import get_document_model

class PageWithCollection(Page):
    collection = models.ForeignKey(
        "wagtailcore.Collection",
        null=True,
        blank=True,
        on_delete=models.SET_NULL,
        related_name='+',
        verbose_name='문서 컬렉션',
    )

    content_panels = Page.content_panels + [
        FieldPanel("collection"),
    ]

    def get_context(self, request):
        context = super().get_context(request)
        documents = get_document_model().objects.filter(collection=self.collection)
        context['documents'] = documents
        return context

다음은 문서 컬렉션에 액세스하고 렌더링하는 예제 템플릿입니다.

{% extends "base.html" %}
{% load wagtailcore_tags %}

{% block content %}
    {% if documents %}
    <h3>문서:</h3>
    <ul>
        {% for document in documents %}
        <li>
            <a href="{{ document.url }}" target="_blank">{{ document.title }}</a>
        </li>
        {% endfor %}
    </ul>
    {% endif %}
{% endblock %}

문서 비공개 설정

특정 문서에 대한 액세스를 제한하려면 적절한 개인 정보 설정이 있는 컬렉션에 배치하여 비공개로 만들 수 있습니다(참조: 이미지 / 문서 권한).

비공개 컬렉션은 공개적으로 액세스할 수 없으며, 해당 콘텐츠는 적절한 권한이 있는 사용자만 사용할 수 있습니다.

API 액세스

Wagtail의 문서는 wagtail.documents.api.v2.views.DocumentsAPIViewSet 를 통해 API로 액세스할 수 있습니다. 이를 통해 문서를 프로그래밍 방식으로 상호 작용하고, 세부 정보를 검색하고, 다양한 작업을 수행할 수 있습니다.

자세한 내용은 추가 정보 및 사용 예제를 제공하는 API 섹션을 참조하십시오.