시그널

Wagtail의 RevisionPagedjango.dispatch시그널을 구현합니다. 시그널은 페이지 게시/게시 취소 이벤트에서 부작용을 생성하는 데 유용합니다.

예를 들어, 시그널을 사용하여 메시징 서비스에 게시 알림을 보내거나, 정적 사이트 생성기와 같이 API를 사용하는 다른 앱에 메시지를 POST 할 수 있습니다.

page_published

이 시그널은 페이지 개정이 published 로 설정될 때 Revision 에서 발생합니다.

  • sender - 페이지 class.

  • instance - 특정 Page 인스턴스.

  • revision - 게시된 Revision.

  • kwargs - page_published.send() 에 전달된 다른 인수.

시그널을 수신하려면 page_published.connect(receiver, sender, **kwargs) 를 구현합니다. 다음은 무언가가 게시될 때 팀에 알리는 간단한 예시입니다.

from wagtail.signals import page_published
import requests


# 새 페이지가 게시될 때 모든 사람에게 알립니다.
def send_to_slack(sender, **kwargs):
    instance = kwargs['instance']
    url = 'https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX'
    values = {
        "text" : "%s%s에 의해 게시되었습니다." % (instance.title, instance.owner.username),
        "channel": "#publish-notifications",
        "username": "콘텐츠 오징어",
        "icon_emoji": ":octopus:"
    }

    response = requests.post(url, values)

# 수신자 등록
page_published.connect(send_to_slack)

특정 모델 이벤트 수신

때로는 모든 모델에 대한 시그널을 수신하는 데 관심이 없거나 특정 모델에 대한 시그널을 다른 방식으로 처리하고 싶을 수 있습니다. 예를 들어, 새 블로그 게시물이 게시될 때 무언가를 하고 싶을 수 있습니다.

from wagtail.signals import page_published
from mysite.models import BlogPostPage

# 각 모델 유형에 대해 영리한 작업 수행
def receiver(sender, **kwargs):
    # 블로그 게시물로 작업 수행
    pass

# 각 페이지 모델 클래스에 대한 리스너 등록
page_published.connect(receiver, sender=BlogPostPage)

Wagtail은 wagtail.modelsget_page_models() 함수를 통해 등록된 페이지 유형 목록에 대한 액세스를 제공합니다.

발신자 지정에 대한 자세한 내용은 Django 문서를 참조하십시오.

page_unpublished

이 시그널은 페이지가 게시 취소될 때 Page 에서 발생합니다.

  • sender - 페이지 class.

  • instance - 특정 Page 인스턴스.

  • kwargs - page_unpublished.send() 에 전달된 다른 인수.

pre_page_movepost_page_move

이 시그널은 Page 가 이동되기 직전과 직후에 Page 에서 발생합니다.

데이터베이스 변경 사항이 적용되기 에 값을 알아야 하는 경우 pre_page_move 를 구독하십시오. 예: 페이지의 이전 URL 또는 해당 하위 페이지의 URL 가져오기.

데이터베이스 변경 사항이 적용된 에 값을 알아야 하는 경우 post_page_move 를 구독하십시오. 예: 페이지의 새 URL 또는 해당 하위 페이지의 URL 가져오기.

두 시그널 모두에 대해 다음 인수가 발생합니다.

  • sender - 페이지 class.

  • instance - 특정 Page 인스턴스.

  • parent_page_before - 이동 instance 의 부모 페이지.

  • parent_page_after - 이동 instance 의 부모 페이지.

  • url_path_before - 이동 instance.url_path 의 값.

  • url_path_after - 이동 instance.url_path 의 값.

  • kwargs - pre_page_move.send() 또는 post_page_move.send() 에 전달된 다른 인수.

‘이동’과 ‘재정렬’ 구분

시그널은 페이지가 다른 섹션으로 이동된 결과(‘이동’) 또는 동일한 섹션 내에서 다른 위치로 이동된 결과(‘재정렬’)로 발생할 수 있습니다. 둘 사이의 차이를 아는 것이 특히 유용할 수 있습니다. ‘이동’만 페이지의 URL(및 해당 하위 페이지의 URL)에 영향을 미치고, ‘재정렬’은 자연스러운 페이지 순서에만 영향을 미치기 때문입니다. 이는 아마도 영향이 덜할 것입니다.

‘이동’과 ‘재정렬’을 구분하는 가장 좋은 방법은 url_path_beforeurl_path_after 값을 비교하는 것입니다. 예를 들어:

from wagtail.signals import pre_page_move
from wagtail.contrib.frontend_cache.utils import purge_page_from_cache

# 페이지가 다른 섹션으로 이동할 때 페이지의 이전 URL을 캐시에서 지웁니다.
def clear_page_url_from_cache_on_move(sender, **kwargs):

    if kwargs['url_path_before'] == kwargs['url_path_after']:
        # URL이 변경되지 않습니다 :) 할 일이 없습니다!
        return

    # 페이지가 새 섹션으로 이동하고 있으므로(새 사이트일 수도 있음)
    # 캐시에서 이전 URL을 지웁니다.
    purge_page_from_cache(kwargs['instance'])

# 수신자 등록
pre_page_move.connect(clear_old_page_urls_from_cache)

page_slug_changed

이 시그널은 슬러그 변경 사항이 게시될 때 Page 에서 발생합니다.

이 시그널에서 다음 인수가 발생합니다.

  • sender - 페이지 class.

  • instance - 업데이트된(및 저장된) 특정 Page 인스턴스.

  • instance_before - 변경 사항이 저장되기 특정 Page 인스턴스의 복사본.

workflow_submitted

이 시그널은 페이지가 워크플로에 제출될 때 WorkflowState 에서 발생합니다.

  • sender - WorkflowState

  • instance - 특정 WorkflowState 인스턴스.

  • user - 워크플로를 제출한 사용자

  • kwargs - workflow_submitted.send() 에 전달된 다른 인수.

workflow_rejected

이 시그널은 페이지가 워크플로에서 거부될 때 WorkflowState 에서 발생합니다.

  • sender - WorkflowState

  • instance - 특정 WorkflowState 인스턴스.

  • user - 워크플로를 거부한 사용자

  • kwargs - workflow_rejected.send() 에 전달된 다른 인수.

workflow_approved

이 시그널은 페이지의 워크플로가 성공적으로 완료될 때 WorkflowState 에서 발생합니다.

  • sender - WorkflowState

  • instance - 특정 WorkflowState 인스턴스.

  • user - 워크플로를 마지막으로 승인한 사용자

  • kwargs - workflow_approved.send() 에 전달된 다른 인수.

workflow_cancelled

이 시그널은 페이지의 워크플로가 취소될 때 WorkflowState 에서 발생합니다.

  • sender - WorkflowState

  • instance - 특정 WorkflowState 인스턴스.

  • user - 워크플로를 취소한 사용자

  • kwargs - workflow_cancelled.send() 에 전달된 다른 인수.

task_submitted

이 시그널은 페이지가 작업에 제출될 때 TaskState 에서 발생합니다.

  • sender - TaskState

  • instance - 특정 TaskState 인스턴스.

  • user - 페이지를 작업에 제출한 사용자

  • kwargs - task_submitted.send() 에 전달된 다른 인수.

task_rejected

이 시그널은 페이지가 작업에서 거부될 때 TaskState 에서 발생합니다.

  • sender - TaskState

  • instance - 특정 TaskState 인스턴스.

  • user - 작업을 거부한 사용자

  • kwargs - task_rejected.send() 에 전달된 다른 인수.

task_approved

이 시그널은 페이지의 작업이 승인될 때 TaskState 에서 발생합니다.

  • sender - TaskState

  • instance - 특정 TaskState 인스턴스.

  • user - 작업을 승인한 사용자

  • kwargs - task_approved.send() 에 전달된 다른 인수.

task_cancelled

이 시그널은 페이지의 작업이 취소될 때 TaskState 에서 발생합니다.

  • sender - TaskState

  • instance - 특정 TaskState 인스턴스.

  • user - 작업을 취소한 사용자

  • kwargs - task_cancelled.send() 에 전달된 다른 인수.

copy_for_translation_done

이 시그널은 번역 가능한 모델 또는 페이지가 새 로케일로 복사될 때(번역됨) CopyForTranslationAction 또는 CopyPageForTranslationAction 에서 발생합니다.

번역 가능한 모델은 TranslatableMixin을 구현하는 모델입니다.

  • sender - CopyForTranslationAction 또는 CopyPageForTranslationAction

  • source_obj - 원본 객체

  • target_obj - 새 로케일의 원본 객체 복사본

init_new_page

이 시그널은 관리자 인터페이스에서 새 페이지가 초기화될 때 CreateView 에서 발생합니다. 즉, 사용자가 새 페이지를 만들기 위한 폼으로 이동할 때 발생합니다.

기본값이 충분하지 않을 때 페이지 폼을 프로그래밍 방식으로 미리 채우는 데 유용합니다.

  • sender - CreateView

  • page - 새 페이지 인스턴스

  • parent_page - 새 페이지의 부모 페이지

다음은 이 시그널을 사용하여 페이지의 부모 제목을 접두사로 사용하여 새 페이지의 제목을 미리 채우는 방법의 예입니다.

from wagtail.signals import init_new_page

def prepopulate_page(sender, page, parent, **kwargs):
    if parent:
        page.title = f"{parent.title}: 새 페이지 제목"

init_new_page.connect(prepopulate_page)

페이지 생성 및 편집 폼의 더 복잡한 사용자 지정에 대한 자세한 내용은 생성된 양식 사용자 정의를 참조하십시오.