Write static pages

Once your site is complete, you can choose to either serve it within your Flask app or write static HTML pages ready for publication on the web as a static site.

Almoststatic provides the write_static method, which writes static pages to the disk. It only writes the pages in the location that you specify.

It is up to you to publish your pages where needed and to copy your static contents.

The best way to write a static site is to create a small script. The core of the script should look like this:

import sys
import almoststatic

a = almoststatic.Almoststatic()
a.load_config()

STATIC_URL = '/'
MEDIA_PREFIX = 'media'
DESTINATION = './_static_site'

if len(sys.argv) > 1:
   STATIC_URL = sys.argv[1]
   print(STATIC_URL)

a.write_static(destination=DESTINATION,
               media_prefix=MEDIA_PREFIX,
               static_url=STATIC_URL)

a.write_json_meta(destination=DESTINATION)

The destination parameter is the location where files will be written to on your disk.

The static_url parameter allows you to set the location of files starting from your URL. For example, if your site is hosted at https://mystatic.example.com/my_pages/, static_url will be /my_pages/. If your pages will be read from the file system, you should leave static_url as an empty string so that URLs are treated as relative. If files are located at the root of your domain, static_url should be / because this optimizes browser cache.

In this case we added the capability to add static URL as argument to the script.

The media_prefix parameter allows you to change the location of media files from ‘/content/media’, which is the default in the development environment, to the location where they will be in the static site.

Keep in mind that when write_static is working, it changes the global variable is_static from False to True. So, if during development you have pages that you don’t want to include in the static site, you can exclude them by inspecting the value of that variable.

By default, write_static writes all pages of the site. However, if needed, you can choose the pages to write by setting the pages parameter or the out_pages parameter.

There is also the write_json_meta method that allows you to write a JSON file containing all metadata for pages. This can be used to write some JavaScript on the client side to access information about pages. However, Almoststatic always writes a file called site_meta.json on the root of the media folder, so this method is often not required.

If you wish, you can add to your script all you need to automate the publishing of the site, such as client FTP commands or automatic copying of media files. See flaskapp.py in the sample folder to see automatic FTP publishing in action.