Wagtail api : мои страницы не появляются в /api/cms/pages/
Я настроил свой wagtail на использование api и обслуживание страниц на конечной точке /api/cms/pages/. Но у меня только страница по умолчанию обслуживается на этой конечной точке :
"meta": {
"total_count": 1
},
"items": [
{
"id": 2,
"meta": {
"type": "wagtailcore.Page",
"detail_url": "http://localhost/api/cms/pages/2/",
"html_url": "http://localhost/",
"slug": "home",
"first_published_at": null
},
"title": "Welcome to your new Wagtail site!"
}
]
}
Я создал несколько BlogPage и PostPage, но они там не отображаются. Как я могу настроить мои файлы django/wagtail, чтобы они появились? Документация здесь : https://docs.wagtail.org/en/stable/advanced_topics/api/v2/usage.html не очень подробная...
Вот мой models.py :
А вот мой urls.py :
from django.contrib import admin
from django.urls import path, include
from django.conf import settings
from wagtail.core import urls as wagtail_urls
from wagtail.admin import urls as wagtailadmin_urls
from wagtail.documents import urls as wagtaildocs_urls
from blog.api import api_router
from blog.api import blog_router
urlpatterns = [
path('admin/', admin.site.urls),
path('cms-admin/', include(wagtailadmin_urls)),
path('documents/', include(wagtaildocs_urls)),
path('api/blog/', include(blog_router.urls)),#/posts, categories and tags to get the api pages
path('api/cms/', api_router.urls),#/pages to get the api pages
path('', include('custom_comments.urls')),
# For anything not caught by a more specific rule above, hand over to
# Wagtail's serving mechanism
path('', include(wagtail_urls)),
]
if settings.DEBUG:
from django.conf.urls.static import static
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
А вот мой api.py
from django.contrib.contenttypes.models import ContentType
from django.urls import path
from rest_framework import serializers
from wagtail.api.v2.router import WagtailAPIRouter
from wagtail.api.v2.views import BaseAPIViewSet, PagesAPIViewSet
from wagtail.documents.api.v2.views import DocumentsAPIViewSet
from wagtail.images.api.v2.views import ImagesAPIViewSet
from wagtail.core.models import Page
from blog.serializers import CategorySerializer, TagSerializer
from blog.models import BlogCategory, Tag
from wagtail_headless_preview.models import PagePreview
from blog.views import CategorySet, PostPageSet, TagSet
from rest_framework import routers
api_router = WagtailAPIRouter("wagtailapi")
api_router.register_endpoint('pages', PagesAPIViewSet)
api_router.register_endpoint("images", ImagesAPIViewSet)
api_router.register_endpoint("documents", DocumentsAPIViewSet)
blog_router = routers.DefaultRouter()
blog_router.register(r"posts", PostPageSet)
blog_router.register(r"categories", CategorySet)
blog_router.register(r"tags", TagSet)
class PagePreviewAPIViewSet(PagesAPIViewSet):
known_query_parameters = PagesAPIViewSet.known_query_parameters.union(
["content_type", "token"]
)
def listing_view(self, request):
page = self.get_object()
return page.serve(request)
def detail_view(self, request, pk):
page = self.get_object()
return page.serve(request)
def get_object(self):
app_label, model = self.request.GET["content_type"].split(".")
content_type = ContentType.objects.get(app_label=app_label, model=model)
page_preview = PagePreview.objects.get(
content_type=content_type, token=self.request.GET["token"]
)
page = page_preview.as_page()
if not page.pk:
# fake primary key to stop API URL routing from complaining
page.pk = 0
return page
api_router.register_endpoint("page_preview", PagePreviewAPIViewSet)
class CategoryAPIViewSet(BaseAPIViewSet):
base_serializer_class = CategorySerializer
filter_backends = []
meta_fields = []
body_fields = ['id', 'slug', 'name']
listing_default_fields = ['id', 'slug', 'name']
nested_default_fields = []
name = 'category'
model = BlogCategory
api_router.register_endpoint("category", CategoryAPIViewSet)
class TagAPIViewSet(BaseAPIViewSet):
base_serializer_class = TagSerializer
filter_backends = []
meta_fields = []
body_fields = ['id', 'slug', 'name']
listing_default_fields = ['id', 'slug', 'name']
nested_default_fields = []
name = 'tag'
model = Tag
api_router.register_endpoint("tag", TagAPIViewSet)
Я создал страницы как корневые, а не как дочерние страницы сконфигурированного сайта: в меню cms появилось сообщение об ошибке :
There is no site set up for this location. Pages created here will not be accessible at any URL until a site is associated with this location. Configure a site now.
Однако я не нашел, как прикрепить несколько страниц к сайту, когда страницы создаются как корень wagtail. Только одна страница может быть прикреплена к сайту, а затем только ее дочерние страницы могут быть получены