Search code examples
djangocontent-management-systemgraphqlwagtailgraphene-python

Wagtail add page between two existing pages


I'm using wagtail in a django application with a graphql interface. Wagtail is only the backend and I'm implementing an editor with vuejs and a graphql interface using graphene.

I'd like to add a new page between two existing pages. The page order depends on the path parameter of the page. Is it possible to achieve this without manipulating the path param?

I can change the path param of the pages in wagtail, but this seems to me to be error prone and not as the creators of wagtail intended to be done.


Solution

  • Wagtail uses Django treebeard to enforce the tree structure of pages, and the Wagtail Page model subclasses the Treebeard Node model. I would strongly discourage manipulating the path parameters manually, that could completely mess up your structure. Instead use the Treebeard API to add/remove/move pages/nodes around.

    The add_sibling method seems like it'd be the most appropriate here, used like this:

    new_page = MyPageModel(
        title='My Title'
        slug='foo'
        ...
    )
    page = Page.objects.get(path='0001...')
    page.add_sibling('right', instance=new_page)
    

    Your new_page will be inserted to the right of your chosen page, and all other pages after it will be shifted to the right.