Skip to main content

Wagtail module to load pages from Yaml

Project description

Adds the ability to Wagtail to import/update pages from a Yaml file.

Installing

INSTALLED_APPS = (
    ...
    'wagtailimporter',
    ...
)

Usage

./manage.py import_pages <page.yml> [<page.yml> [<page.yml> ... ] ...]

File format

Create a Yaml file/s for your pages.

url: /site
type: home.homepage

# Your fields go here
title: Welcome to my site!

---

url: /site/about-us
type: basic.basicpage

title: About Us
# This is a stream field
body:
    - type: heading
      value: About Us
    - type: paragraph
      value: |
            <p>
                Rich text block.
            </p>

    - type: linkbutton
      # Yaml object to reference another page on the site
      link: !page
          url: /site/contact-us
      text: Contact us

# This is rich text
tagline: |
    <div>We are <em>super great!</em></div>

---

!custom_snippet
    slug: my-snippet
    title: My Snippet

Foreign Object References

Instead of having to resolve foreign keys (yuck!) you can pass Yaml objects to create references, e.g. !page takes arguments that are used to reference a page (by path url).

Builtin reference types:

  • !page

    Takes a url parameter to another page (must be already present).

  • !image

    Takes a file parameter to an image (either in MEDIA/original/images.

    Can also accept other Image related parameters such as title.

  • !document

    Takes a file parameter to a document (e.g. a PDF) - not to be confused with a yaml ‘document’.

    Also accepts a title paramater (recommended for a better admin experience)

  • !site

    Lookup a Site by its hostname.

    Can also create sites if you specify root_page (as a !page).

    !site
        hostname: localhost
        site_name: My Site
        root_page: !page
            url: /my-site
        is_default_site: true
  • All registered Wagtail settings, using !app.mysetting

    !app.socialmedialinks:
        site: !site
            hostname: localhost
        facebook_url: https://www.facebook.com/squareweave/

You can also create your own for your models:

import wagtailimporter.serializer

class Toplevel(wagtailimporter.serializer.GetOrCreateForeignObject):
    """A reference to a toplevel"""
    yaml_tag = '!toplevel'
    model = TopLevel

The following base classes are provided:

  • GetForeignObject

    Calls get on an object defined by lookup_keys.

  • GetOrCreateForeignObject (inherits from GetForeignObject)

    Calls get_or_create as above.

  • GetOrCreateClusterableForeignObject (inherits from GetForeignObject)

    Calls get or creates a new, unsaved object (useful for ClusterableModel related classes).

    For example:

    url: /my/page
    type: some.type
    related_pages:
        - !relatedpage
              page: !page
                  url: /my/other/page
    class RelatedPage(Orderable):
        """A related page."""
    
        parent = ParentalKey(SiteSettings, related_name='related_pages')
        page = models.ForeignKey('wagtailcore.Page',
                                 null=True, blank=True,
                                 on_delete=models.CASCADE,
                                 related_name='+')
    
        panels = [
            PageChooserPanel('page'),
        ]
    
    
    class RelatedPageTag(GetOrCreateClusterableForeignObject):
    
        model = RelatedPage
        yaml_tag = '!relatedpage'
        lookup_keys = ('page',)

Importing snippets

Foreign object references can also be used to create and import snippets.

!custom_snippet
    slug: my-snippet
    title: My Snippet
import wagtailimporter.serializer

class MySnippet(wagtailimporter.serializer.GetOrCreateForeignObject):
    """Creates a snippet"""
    yaml_tag = '!my-snippet'
    model = MySnippet

    lookup_keys = ('slug',)

License

Copyright (c) 2016, Squareweave Pty Ltd

All rights reserved.

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

  • Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.

  • Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.

  • Neither the name of the Squareweave nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SQUAREWEAVE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

wagtailimporter-2.0.0.tar.gz (377.6 kB view details)

Uploaded Source

File details

Details for the file wagtailimporter-2.0.0.tar.gz.

File metadata

File hashes

Hashes for wagtailimporter-2.0.0.tar.gz
Algorithm Hash digest
SHA256 88a1d4227b3d54ccc50f10cb2be7f08a8903abb351398ccaec65d0c84a6e45d2
MD5 d075ba70054db1e81567e584c7a77840
BLAKE2b-256 860c03974269c9b1dbc9bcc0e1d5d449c90ab6e6e2eb78cce83a08e0f20ad5de

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page