在 wagtail 中公开页面别名 API
Expose page alias in wagtail API
Wagtail 最近获得了对页面别名的支持(同一页面在树的另一部分)。
APIreturn这些页面就像是“普通”页面一样。
我希望 API 告诉我该页面是另一个页面的别名。这样做的原因是为了能够添加一个rel="canonical"
link.
我还希望能够(可选)return 使用 API 的原始页面的别名列表。这样我就可以建立一个列表“这个页面也可以在这里找到”。
似乎可以通过检查 alias_of
ForeignKey
:
来检测别名
但我不确定如何使用 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",
...
}
Wagtail 最近获得了对页面别名的支持(同一页面在树的另一部分)。
APIreturn这些页面就像是“普通”页面一样。
我希望 API 告诉我该页面是另一个页面的别名。这样做的原因是为了能够添加一个rel="canonical"
link.
我还希望能够(可选)return 使用 API 的原始页面的别名列表。这样我就可以建立一个列表“这个页面也可以在这里找到”。
似乎可以通过检查 alias_of
ForeignKey
:
但我不确定如何使用 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",
...
}