Wagtail:如何覆盖默认的ImageEmbedHandler?

2024-09-30 14:28:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我在自己的Django后端实现wagtailcms时遇到了一些问题。我正在尝试使用“无头”版本,并在我自己的SPA上呈现内容。因此,我需要创建自己的EmbedHandler,以便生成指向文档的URL和指向私有S3存储桶的图像。不幸的是,尽管我已经注册了自己的PrivateS3ImageEmbedHandler,Wagtail仍然使用默认的ImageEmbedHandler将类似html的主体转换为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)

Tags: instanceimageregisterurlgetmodelreturndef
1条回答
网友
1楼 · 发布于 2024-09-30 14:28:17

您需要确保您的@hooks.register('register_rich_text_features')调用发生在wagtail.images应用程序中的调用之后;这可以通过将应用程序放在INSTALLED_APPS中的wagtail.images之后,或者通过传递大于0的order参数来实现:

@hooks.register('register_rich_text_features', order=10)

相关问题 更多 >