시그널¶
Wagtail의 Revision 및 Page는 django.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.models 의 get_page_models() 함수를 통해 등록된 페이지 유형 목록에 대한 액세스를 제공합니다.
발신자 지정에 대한 자세한 내용은 Django 문서를 참조하십시오.
page_unpublished¶
이 시그널은 페이지가 게시 취소될 때 Page 에서 발생합니다.
sender- 페이지class.instance- 특정Page인스턴스.kwargs-page_unpublished.send()에 전달된 다른 인수.
pre_page_move 및 post_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_before 와 url_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-WorkflowStateinstance- 특정WorkflowState인스턴스.user- 워크플로를 제출한 사용자kwargs-workflow_submitted.send()에 전달된 다른 인수.
workflow_rejected¶
이 시그널은 페이지가 워크플로에서 거부될 때 WorkflowState 에서 발생합니다.
sender-WorkflowStateinstance- 특정WorkflowState인스턴스.user- 워크플로를 거부한 사용자kwargs-workflow_rejected.send()에 전달된 다른 인수.
workflow_approved¶
이 시그널은 페이지의 워크플로가 성공적으로 완료될 때 WorkflowState 에서 발생합니다.
sender-WorkflowStateinstance- 특정WorkflowState인스턴스.user- 워크플로를 마지막으로 승인한 사용자kwargs-workflow_approved.send()에 전달된 다른 인수.
workflow_cancelled¶
이 시그널은 페이지의 워크플로가 취소될 때 WorkflowState 에서 발생합니다.
sender-WorkflowStateinstance- 특정WorkflowState인스턴스.user- 워크플로를 취소한 사용자kwargs-workflow_cancelled.send()에 전달된 다른 인수.
task_submitted¶
이 시그널은 페이지가 작업에 제출될 때 TaskState 에서 발생합니다.
sender-TaskStateinstance- 특정TaskState인스턴스.user- 페이지를 작업에 제출한 사용자kwargs-task_submitted.send()에 전달된 다른 인수.
task_rejected¶
이 시그널은 페이지가 작업에서 거부될 때 TaskState 에서 발생합니다.
sender-TaskStateinstance- 특정TaskState인스턴스.user- 작업을 거부한 사용자kwargs-task_rejected.send()에 전달된 다른 인수.
task_approved¶
이 시그널은 페이지의 작업이 승인될 때 TaskState 에서 발생합니다.
sender-TaskStateinstance- 특정TaskState인스턴스.user- 작업을 승인한 사용자kwargs-task_approved.send()에 전달된 다른 인수.
task_cancelled¶
이 시그널은 페이지의 작업이 취소될 때 TaskState 에서 발생합니다.
sender-TaskStateinstance- 특정TaskState인스턴스.user- 작업을 취소한 사용자kwargs-task_cancelled.send()에 전달된 다른 인수.
copy_for_translation_done¶
이 시그널은 번역 가능한 모델 또는 페이지가 새 로케일로 복사될 때(번역됨) CopyForTranslationAction 또는 CopyPageForTranslationAction 에서 발생합니다.
번역 가능한 모델은 TranslatableMixin을 구현하는 모델입니다.
sender-CopyForTranslationAction또는CopyPageForTranslationActionsource_obj- 원본 객체target_obj- 새 로케일의 원본 객체 복사본
init_new_page¶
이 시그널은 관리자 인터페이스에서 새 페이지가 초기화될 때 CreateView 에서 발생합니다. 즉, 사용자가 새 페이지를 만들기 위한 폼으로 이동할 때 발생합니다.
기본값이 충분하지 않을 때 페이지 폼을 프로그래밍 방식으로 미리 채우는 데 유용합니다.
sender-CreateViewpage- 새 페이지 인스턴스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)
페이지 생성 및 편집 폼의 더 복잡한 사용자 지정에 대한 자세한 내용은 생성된 양식 사용자 정의를 참조하십시오.