Skip to main content

Write Markdown and Jinja2 templates to create a website

Project description

htmd

htmd allows you to write Markdown and use templates to create a static website. Yes it is another static site generator.

Why another static site generator?

I admit I didn't try them all. I tried several static site generators written in Python, but I found them complicated. Some static site generators I tried created a template website with content on the home page but the index.html file had no content. It should be obvious where to find the content.

  • I don't like starting with a lot of folders and files
  • I want all blog posts in the same folder because it is easier to work with. I want the URL structure for each post to include the date (/2015/01/31/post-title), without having to create a folder for each year and month.
  • I don't want to include all of the templates being used, only overwrite the ones I modified.
  • I want it to be obvious where to find the content.
  • I want it to be obvious how to set a value to use in multiple templates.
  • If you made changes to one of your templates and ran build you wouldn't update existing files unless you deleted your build folder everytime.

I believe the reason there are so many static site generators is people are picky about their workflow and that's okay. This is also a great way to stay up to date with Packaging in Python.

What is the difference between posts and pages?

Posts are blog posts with dates and authors tracked by feeds. Pages are other webpages on the site, for example the About page.

How do I edit the layout of the site?

Edit the templates/_layout.html file that was created when running htmd start. This a Jinja 2 template that all other pages will use by default. You can add a link to CSS file that you have created in static/. To change other pages you will need to override the page template by creating a file with the same name in the templates/ folder. The complete list of templates can be found here.

How do drafts work?

A post will be a draft if draft: true is set in the metadata and will not appear in the build folder. If draft: build is set then the post page will be in the build but the post will not appear in any list pages. When a draft is built the metadata value will contain a UUID of where the post is available.

For example, if the draft metadata is draft: build|f47d4d98-9d66-448a-9e08-7b5c2032e558 then the post will served at /draft/f47d4d98-9d66-448a-9e08-7b5c2032e558/index.html.

To view the site as if all drafts were published run htmd preview --drafts.

Getting Started

$ pip install htmd
Commands:
  start      Create example files to get started.
  verify     Verify posts formatting is correct.
  build      Create static version of the site.
  preview    Serve files to preview site.
  templates  Create any missing templates

Development

Running the development version locally

$ git clone https://github.com/Siecje/htmd.git
$ python3 -m venv venv
$ venv/bin/python -m pip install pip setuptools wheel --upgrade
$ venv/bin/python -m pip install -e htmd/
# You can now make changes inside htmd/ without having to re-install
$ mkdir my_site
$ cd my_site
$ ../venv/bin/htmd start
# You can also create a symlink to htmd
# somewhere on your $PATH and just use `htmd start`
$ ../venv/bin/htmd build

Running mypy

$ venv/bin/python -m pip install mypy types-Pygments types-beautifulsoup4
$ venv/bin/python -m mypy .

Running ruff

$ venv/bin/python -m pip install ruff
$ venv/bin/python -m ruff check --exclude typehints

Running the tests

$ git clone https://github.com/Siecje/htmd.git
$ cd htmd
$ python3 -m venv venv
$ venv/bin/python -m pip install pip setuptools wheel --upgrade
$ venv/bin/python -m pip install -e .
$ venv/bin/python -m pip install pytest
$ venv/bin/python -m pytest .

Running the tests with coverage.py

$ venv/bin/python -m pip install coverage
$ venv/bin/coverage run --branch -m pytest .
$ venv/bin/coverage html --omit='/private/*'
$ open htmlcov/index.html

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

htmd-5.0.0.tar.gz (25.1 kB view details)

Uploaded Source

Built Distribution

htmd-5.0.0-py3-none-any.whl (21.3 kB view details)

Uploaded Python 3

File details

Details for the file htmd-5.0.0.tar.gz.

File metadata

  • Download URL: htmd-5.0.0.tar.gz
  • Upload date:
  • Size: 25.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.12.1

File hashes

Hashes for htmd-5.0.0.tar.gz
Algorithm Hash digest
SHA256 0c7a96074a43f6610c1784a3383492d64f3ff2023cca7fb185651143c469f458
MD5 dc710a6e5e649678f185c3462bc23493
BLAKE2b-256 1ecf0f72ae0dfabc2de5a9ab440c85206e120d88f109b1c8c42880b3c1ff9bd4

See more details on using hashes here.

File details

Details for the file htmd-5.0.0-py3-none-any.whl.

File metadata

  • Download URL: htmd-5.0.0-py3-none-any.whl
  • Upload date:
  • Size: 21.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.12.1

File hashes

Hashes for htmd-5.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 63f3d86e8414df424ea62e0a598ba061de103f84ec1d3a366defc66897734bef
MD5 629204ff01c7af1fe6cc08d97f6782d5
BLAKE2b-256 53d2f077afe4adae4dd4f3681beefd6ad3119b5849b05de446e3b5a20fa22e7b

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