【问题标题】:Wagtail: How to override default ImageEmbedHandler?Wagtail:如何覆盖默认的 ImageEmbedHandler?
【发布时间】:2019-09-17 20:22:03
【问题描述】:

我在自己的 Django 后端实现 Wagtail CMS 时遇到了一些麻烦。我正在尝试使用“无头”版本并在我自己的 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)

【问题讨论】:

    标签: python django wagtail


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-09
      • 1970-01-01
      • 2015-03-20
      • 2016-05-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多