我目前正在尝试创建一个使用Django + Wagtail作为其后端内容,并使用React作为前端的Web应用程序。到目前为止,在页面加载时,我通过http GET请求从Wagtail请求了所有“文章”。然后,我在前端组件中显示此数据。

除我遇到的一个问题(即文章正文中的媒体表示为具有本地来源的<embed />标记)外,此方法效果很好。相反,我想要的是一个<img />标记,其中src指向存储图像的URL。如何在后端进行更改?我似乎找不到有关此问题的任何类型的文档。

这是我的get request响应当前的样子:

{
    "id": 9,
    ...
    "title": "Child page",
    "date": null,
    "body": "<p>Here is a test image:</p><embed alt=\"testimg\" embedtype=\"image\" format=\"fullwidth\" id=\"5\"/><p></p>",
    "author": "Isaac"
}


这是我想要的样子:

{
    "id": 9,
    ...
    "title": "Child page",
    "date": null,
    "body": "<p>Here is a test image:</p><img src="image-location-url"/><p></p>",
    "author": "Isaac"
}


我应该怎么做?这可以通过Wagtail设置配置来控制吗?还是应该以某种方式更改我的内容模型?谢谢。

最佳答案

直接从Github页面上的评论(https://github.com/wagtail/wagtail/issues/2695#issuecomment-373002412)复制:

from wagtail.wagtailcore.rich_text import expand_db_html


class APIRichTextField(APIField):
    def __init__(self, name):
        serializer = serializers.APIRichTextSerializer()
        super().__init__(name=name, serializer=serializer)


class APIRichTextSerializer(fields.CharField):
    def to_representation(self, instance):
        representation = super().to_representation(instance)
        return expand_db_html(representation)

class MyModel(Page):
    body = RichTextField()
    api_fields = [
        APIRichTextField('body'),
    ]


现在,我的身体直接转换为将在Wa尾上显示的html。感谢@solarissmoke提供指导。如果此答案/问题不符合指导原则,请告诉我,我们很乐意将其删除。

关于python - 如何更改Wagtail通过其API为媒体提供媒体的方式?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56299462/

10-12 18:46