Skip to main content

Small & fast python library to build static websites

Project description

haumea PyPI version

Small & fast python static site generator (SSG) optimized for external JSON (REST API, GraphQL etc.) data driven contents.

Work in progress...

Haumea requires Python >=3.6

Installation

$ pip install haumea

Quickstart

You can create a skeleton project with the haumea-quickstart command

$ haumea-quickstart yourprojectname
yourprojectname
├── content		# All content for your website will live inside this directory   └── (pages)
├── layouts		# Stores .html templates files   └── partials
│   	└── footer.html
│   	└── header.html
│   	└── head.html
│   └── _base.html
├── public		# Your site will be rendered into this dir
└── static		# Stores all the static content: images, CSS, JavaScript, etc.

Build & test your website

$ cd yourprojectname/
$ haumea serve

Or just build

$ cd yourprojectname/
$ haumea build

Documentation

Directory Structure (sample)

yourprojectname
├── content
│   └── index.html			# Simple page   └── about.html			# Simple page   	└── blog             		# Subdir   	    └── post-1.html     	# Simple page	    └── post-2.html   		# Simple page	    └── post-3.html 		# Simple page   └── products/        		# Subdir	    └── _product.html 		# Page bundle (create from a json array of data)	    └── _product.graphql	# graphql query (for json-request-type="graphql")
├── layouts
│   └── partials
│   	└── footer.html
│   	└── header.html
│   	└── head.html
│   └── _base.html
├── public
└── static

Templating tags (layouts dir)

# render your content into template
{{ _content }} 	

# basic template include
{% include "partials/header.html" %}	

# basic render of menu
{% menu mymainmenu %}	

    # html output
    <ul>
        <li><a href="">item 1</a></li>
        <li><a href="">item 1</a></li>
        <li><a href="">item 1</a></li>
    </ul>

# advanced render of menu
{% menu myfootermenu a.item %}

    # html output
    <a class="item" href="">item 1</a>
    <a class="item" href="">item 1</a>
    <a class="item" href="">item 1</a>

# advanced render of menu
{% menu mycustommenu nav.menu>div.item>a.link.is-active %}

    # html output
    <nav class="menu">
        <div class="item">
            <a class="link is-active" href="">item 1</a>
        </div>
        <div class="item">
            <a class="link" href="">item 1</a>
        </div>
        <div class="item">
            <a class="link" href="">item 1</a>
        </div>
    </nav>

# custom render of menu
{% for menu in _menus.main %}
    <li><a href="{{ menu.page.permalink }}">{{ menu.page._params.title }} - {{ menu.page._json_.fields.regular_price|{:.2f} }}</a></li>
{% endfor %}

# basic render of current timestamp
{% time %}		

{{ _params.title }}
{{ _json_.short_title }}
{{ _json.regular_price|{:.2f} }}

Content config

Static page

page.html

---
{
    "title":"Welcome home",
    "menus":["main", "footer"]
}
---

Single page from JSON or REST API

page.html

---
{
    "json-source" : "https://api.buttercms.com/v2/pages/*/sample-page/",
    "json-request-type" : "get",
    "json-params" : { "locale" : "fr" , "auth_token" : "XXXXXXX" },
    "json-root-node" : "data",

    "title" : "{{ _json.fields.title }} - {{ _json.fields.product_qty }}",
    "menus" : [ "main" ],
    "slug" : "test"
}
---

Page bundle from JSON with GraphQL

_page.html

---
{
    "json-source" : "https://graphql.datocms.com/",
    "json-request-type" : "graphql",
    "json-headers" : {"Authorization":"token xxxxxxx"},
    "json-root-node" : "data.allProduits",

    "title": "{{ _json.title }}",
    "nav-title": "Navigation Title !",
    "meta-desc" : "{{ _json.meta_description }}",
    "meta-title" : "{{ _json.meta_title }}",
    "slug" : "{{ _json.slug }}",

    "menus" : [ "products", "footer" ]
}
---

_page.graphql

---
query {
    launchesPast(limit: 80) {
        mission_name
        details
        launch_date_local
        ships {
            name
            image
        }
    }
}
---

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

haumea-0.5.4.tar.gz (11.2 kB view hashes)

Uploaded Source

Built Distribution

haumea-0.5.4-py3-none-any.whl (16.8 kB view hashes)

Uploaded Python 3

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