Skip to main content

Generates static HTML sites from a Wagtail project

Project description

Wagtail Freezer

Generates static HTML sites from a Wagtail project

License

PyPI version wagtail-freezer CI

Links

Supported versions

  • Python 3.7 - 3.10
  • Django 3.2 - 4.0
  • Wagtail 3.x

Installation

  • pip install wagtail-freezer

  • Add "wagtail_freezer" to INSTALLED_APPS

  • Add a FREEZER_BUILD_DIR setting indicating where the static files will be output. To write into a folder named build at the project root, use:

    FREEZER_BUILD_DIR = os.path.join(BASE_DIR, "build")
    

Usage

Run ./manage.py buildstaticsite. This will generate one folder per site within FREEZER_BUILD_DIR, with subfolders making up the page tree and the pages themselves saved as index.html at the appropriate point.

While building the static files, wagtail-freezer will scan the HTML for any href or src attributes that reference files under STATIC_URL or MEDIA_URL, and copy these files to corresponding folders under the site root. This step only takes place if STATIC_URL or MEDIA_URL are local URLs beginning with '/'.

If you have additional static / media files that can't be found by parsing HTML (for example, images referenced within CSS, JavaScript or JSON), you can provide a freezer_follow_urls method on the page model that returns a list of media / static URLs to be followed:

class HomePage(Page):
    @property
    def freezer_follow_urls(self):
        urls = ['/static/images/background.jpg']
        for item in self.playlist.select_related('video'):
            urls.append(item.video.url)
        return urls

Deploying

When you're happy with how the local static site works (test it by running python -m http.server from the root folder), you can deploy it to Amazon S3 by installing the AWS command line tool (pip install awscli), creating a bucket configured for static website hosting, and running:

aws s3 sync build/localhost s3://mysite.example.com/ --acl public-read

Limitations

wagtail-freezer was created as a "minimum viable product" substitute for static site generators such as django-bakery, which at the time of writing are lagging behind in support for current Django (and Wagtail) versions. It has only been tested against very simple sites, and will probably not work with custom URL routes (RoutablePageMixin), pages with multiple preview modes (wagtail.contrib.forms, although that's not too usable on a static site anyhow), non-standard middlewares and no doubt lots of other things. Use at your own risk!

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

wagtail-freezer-0.1.0.tar.gz (12.0 kB view details)

Uploaded Source

Built Distribution

wagtail_freezer-0.1.0-py3-none-any.whl (12.5 kB view details)

Uploaded Python 3

File details

Details for the file wagtail-freezer-0.1.0.tar.gz.

File metadata

  • Download URL: wagtail-freezer-0.1.0.tar.gz
  • Upload date:
  • Size: 12.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.10.4

File hashes

Hashes for wagtail-freezer-0.1.0.tar.gz
Algorithm Hash digest
SHA256 e894f3fd2b45c720f0c7fcfc670082919152fe0d4eb23716c9e0c7a228969b91
MD5 91e6e15bbd05b197d049c81e922b38cd
BLAKE2b-256 6d0c853a1f11463708502469a183d68076ebc9a268baeaca33059bf823ddd5d4

See more details on using hashes here.

File details

Details for the file wagtail_freezer-0.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for wagtail_freezer-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 1c111f64fcffa47664898e22f7e4e5fef7e1fe11592f66bce0dda15be05c5c6d
MD5 cb26009ec95cef2481561dab0b6ea5c4
BLAKE2b-256 be22ea865f78a5448b63802dcfb4335b738bdbf44342ca539234102ba03acab0

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