在 wagtail 中公开页面别名 API

Expose page alias in wagtail API

Wagtail 最近获得了对页面别名的支持(同一页面在树的另一部分)。

APIreturn这些页面就像是“普通”页面一样。

我希望 API 告诉我该页面是另一个页面的别名。这样做的原因是为了能够添加一个rel="canonical" link.

我还希望能够(可选)return 使用 API 的原始页面的别名列表。这样我就可以建立一个列表“这个页面也可以在这里找到”。

似乎可以通过检查 alias_of ForeignKey:

来检测别名

https://github.com/wagtail/wagtail/blob/c5f49274c8730ce04ca76df1ceef96d5cc83fac0/wagtail/core/models.py#L843

但我不确定如何使用 Wagtail API 和 DRF 序列化器来完成这项工作。

我们最终只是添加了一个序列化程序并将其添加到我们的 Page 基础 class:

from rest_framework import serializers

from wagtail.api import APIField
from wagtail.core.models import Page

class AliasPageSerializer(serializers.ModelSerializer):
    class Meta:
        model = Page
        fields = ('id', 'full_url')

class BasePage(Page):
    class Meta:
        abstract = True

    api_meta_fields = [
        APIField('alias_of', serializer=AliasPageSerializer()),
    ]

在 API 响应中,结果如下:

{
    "id": 1337,
    "meta": {
        ...
        "alias_of": {
            "id": 42,
            "full_url": "https://example.com/blog/example-blog/"
        },
        ...
    },
    "title": "Example blog",
    ...
}