我目前正在尝试创建一个使用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/