【发布时间】:2017-07-21 05:58:45
【问题描述】:
我正在使用 wagtail 作为网站的 REST 后端。该网站是使用 react 构建的,并通过 wagtails API v2 获取数据。
SPA 网站需要能够在 wagtail 中显示页面预览。我的想法是覆盖页面模型上的serve_preview,并简单地将新页面序列化为 JSON 并将其写入我的前端可以访问的缓存。但是我无法将我的页面序列化为 json。所有的尝试都让人觉得很“hackish”
我曾多次尝试使用序列化程序中内置的 wagtails 扩展,但均未成功:
尝试 1:
def serve_preview(self, request, mode_name):
from wagtail.api.v2.endpoints import PagesAPIEndpoint
endpoint = PagesAPIEndpoint()
setattr(request, 'wagtailapi_router',
WagtailAPIRouter('wagtailapi_v2'))
endpoint.request = request
endpoint.action = None
endpoint.kwargs = {'slug': self.slug, 'pk': self.pk}
endpoint.lookup_field = 'pk'
serializer = endpoint.get_serializer(self)
感觉这里用router很丑,设置一堆attrs
尝试 2:
def serve_preview(self, request, mode_name):
from wagtail.api.v2.endpoints import PagesAPIEndpoint
fields = PagesAPIEndpoint.get_available_fields(self)
if hasattr(self, 'api_fields'):
fields.extend(self.api_fields)
serializer_class = get_serializer_class(
type(self), fields, meta_fields=[PagesAPIEndpoint.meta_fields], base=PageSerializer)
serializer = serializer_class(self)
更好,但我遇到了上下文问题:
Traceback (most recent call last):
...
File "/usr/local/lib/python3.5/site-packages/wagtail/api/v2/serializers.py", line 92, in to_representation
self.context['view'].seen_types[name] = page.specific_class
KeyError: 'view'
有什么困难吗?
【问题讨论】:
标签: python json django serialization wagtail