Wagtail:如何覆盖默认的 ImageEmbedHandler?
Wagtail: How to override default ImageEmbedHandler?
我在自己的 Django 后端上实施 Wagtail CMS 时遇到了一些问题。我正在尝试使用 'headless' 版本并在我自己的 SPA 上呈现内容。因此,我需要创建自己的 EmbedHandlers,以便可以将 URL 的文档和图像生成到私有 S3 存储桶中。不幸的是,尽管我已经注册了自己的 PrivateS3ImageEmbedHandler
,Wagtail 仍在使用默认的 ImageEmbedHandler
将 html-like 主体转换为 html。我有没有办法设置它,以便 Wagtail 使用我的自定义 EmbedHandler 而不是内置的默认值?
这是我的代码:
from wagtail.core import blocks, hooks
from messaging.utils import create_presigned_url
class PrivateS3ImageEmbedHandler(EmbedHandler):
identifier = "image"
@staticmethod
def get_model():
return get_user_model()
@classmethod
def get_instance(cls, attrs):
model = cls.get_instance(attrs)
print(model)
return model.objects.get(id=attrs['id'])
@classmethod
def expand_db_attributes(cls, attrs):
image = cls.get_instance(attrs)
print(image)
presigned_url = create_presigned_url('empirehealth-mso', image.file)
print(presigned_url)
return f'<img src="{presigned_url}" alt="it works!"/>'
@hooks.register('register_rich_text_features')
def register_private_images(features):
features.register_embed_type(PrivateS3ImageEmbedHandler)
您需要确保您的 @hooks.register('register_rich_text_features')
调用发生在 wagtail.images
应用中的调用之后;这可以通过将您的应用放在 INSTALLED_APPS
中的 wagtail.images
之后,或者通过传递大于 0 的 order
参数来完成:
@hooks.register('register_rich_text_features', order=10)
我在自己的 Django 后端上实施 Wagtail CMS 时遇到了一些问题。我正在尝试使用 'headless' 版本并在我自己的 SPA 上呈现内容。因此,我需要创建自己的 EmbedHandlers,以便可以将 URL 的文档和图像生成到私有 S3 存储桶中。不幸的是,尽管我已经注册了自己的 PrivateS3ImageEmbedHandler
,Wagtail 仍在使用默认的 ImageEmbedHandler
将 html-like 主体转换为 html。我有没有办法设置它,以便 Wagtail 使用我的自定义 EmbedHandler 而不是内置的默认值?
这是我的代码:
from wagtail.core import blocks, hooks
from messaging.utils import create_presigned_url
class PrivateS3ImageEmbedHandler(EmbedHandler):
identifier = "image"
@staticmethod
def get_model():
return get_user_model()
@classmethod
def get_instance(cls, attrs):
model = cls.get_instance(attrs)
print(model)
return model.objects.get(id=attrs['id'])
@classmethod
def expand_db_attributes(cls, attrs):
image = cls.get_instance(attrs)
print(image)
presigned_url = create_presigned_url('empirehealth-mso', image.file)
print(presigned_url)
return f'<img src="{presigned_url}" alt="it works!"/>'
@hooks.register('register_rich_text_features')
def register_private_images(features):
features.register_embed_type(PrivateS3ImageEmbedHandler)
您需要确保您的 @hooks.register('register_rich_text_features')
调用发生在 wagtail.images
应用中的调用之后;这可以通过将您的应用放在 INSTALLED_APPS
中的 wagtail.images
之后,或者通过传递大于 0 的 order
参数来完成:
@hooks.register('register_rich_text_features', order=10)