Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Wagtail:如何覆盖默认的ImageEmbedHandler?_Python_Django_Wagtail - Fatal编程技术网

Python Wagtail:如何覆盖默认的ImageEmbedHandler?

Python Wagtail:如何覆盖默认的ImageEmbedHandler?,python,django,wagtail,Python,Django,Wagtail,我在自己的Django后端实现Wagtail CMS时遇到了一些问题。我正在尝试使用“无头”版本,并在我自己的SPA上呈现内容。因此,我需要创建自己的EmbeddeHandler,以便生成文档的URL和私有S3存储桶的图像。不幸的是,尽管我已经注册了自己的privates3imageembeddhandler,但Wagtail仍在使用默认的imageembeddhandler将类似html的主体转换为html。我有没有办法设置它,让Wagtail使用我的自定义EmbeddeHandler而不是内

我在自己的Django后端实现Wagtail CMS时遇到了一些问题。我正在尝试使用“无头”版本,并在我自己的SPA上呈现内容。因此,我需要创建自己的EmbeddeHandler,以便生成文档的URL和私有S3存储桶的图像。不幸的是,尽管我已经注册了自己的
privates3imageembeddhandler
,但Wagtail仍在使用默认的
imageembeddhandler
将类似html的主体转换为html。我有没有办法设置它,让Wagtail使用我的自定义EmbeddeHandler而不是内置默认值

这是我的密码:

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)
wagtail.core导入块、钩子中的

从messaging.utils导入创建\u预签名\u url
类PrivateS3ImageEmbedHandler(EmbedHandler):
identifier=“图像”
@静力学方法
def get_模型():
返回get\u user\u model()
@类方法
def get_实例(cls、ATTR):
model=cls.get\u实例(attrs)
打印(模型)
返回model.objects.get(id=attrs['id'])
@类方法
def扩展数据库属性(cls、ATTR):
image=cls.get\u实例(attrs)
打印(图像)
预签名url=创建预签名url('empirehealth-mso',image.file)
打印(预签名的url)
返回f“”
@hooks.register('register\u rich\u text\u features')
def register_private_图像(功能):
功能。寄存器嵌入类型(PrivateS3ImageEmbedHandler)

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

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