Um gerador de site estático leve escrito em Python.
Características:
pip install --upgrade gnrt
Pode ser necessário adicionar $HOME/.local/bin
ao seu $PATH
.
gnrt
gnrt
procurará um arquivo config.yml
opcional no diretório de trabalho atual, modelos Jinja2 opcionais na pasta templates
, arquivos markdown na pasta content
e, em seguida, gravará os arquivos de saída gerados na pasta public
, respeitando a pasta content
e sub- estrutura de pastas.
Para obter uma lista de opções, use:
gnrt -h
A configuração é armazenada em config.yml
. Qualquer par de valores-chave é permitido. Essas chaves e seus valores podem ser usados nos arquivos de conteúdo e de modelo.
---
sitename: My awesome blog
baseurl: https://example.com
language: en
foo: bar
Se o arquivo config.yml
existir, gnrt
procurará os defaults
e lists
as entradas.
É aqui que você define os valores de configuração padrão, que podem ser substituídos nos arquivos de conteúdo.
Exemplo:
defaults:
template: default.j2
markdown-extras:
- break-on-newline
- fenced-code-blocks
nav: includes/nav.html
bar: foo
Essas chaves têm um significado específico e seus valores podem ser substituídos em arquivos de conteúdo, como qualquer outro default
.
markdown-extras
: permite habilitar extensões Markdown, veja Extras para uma lista de valorestemplate
: define o modelo Jinja padrão a ser usado ao renderizar arquivos de conteúdoÉ aqui que são definidas listas de conteúdo, permitindo a geração de listas de links, por exemplo.
Exemplo:
lists:
nav1:
filter:
key: category
value: page
template: nav-page.j2
nav2:
filter:
key: category
value: article
sort: published
reverse: true
template: nav-article.j2
rss:
filter:
key: category
value: article
sort: published
reverse: true
template: rss.j2
target: public/rss.xml
As listas podem selecionar conteúdo por meio de um filter
, que obtém uma key
de metadados e um value
correspondente.
Eles podem ser classificados por valor de metadados (por exemplo, uma data de publicação, um número inteiro, ...), em ordem direta (padrão) ou reverse
.
Durante a renderização, o conteúdo gerado é salvo na pasta includes
(para armazenamento em cache), enquanto o caminho do arquivo pode ser personalizado através da chave target
. Isto permite gerar um feed RSS, por exemplo.
Os arquivos de conteúdo têm a extensão .md
e são armazenados na pasta content
.
Os arquivos de conteúdo podem ter um frontmatter – ou seja, metadados estruturados – escrito em YAML.
É aqui que os valores padrão podem ser substituídos.
Exemplo:
---
id: home
title: Home
link: /
nav-order: 3
---
id
: o identificador do item atual, que pode ser usado em qualquer arquivo de conteúdo para acessar os metadados deste itemlink
: URL da página geradatarget
: caminho do arquivo geradotitle
: título do item atual body
do conteúdo é escrito em Markdown.
Também pode conter sintaxe Jinja2 e espaços reservados, permitindo a injeção de valores dataset
, como links para outras páginas:
Check the [about]({{ data.about.link }}) page or read the [articles]({{ data.articles.link }})!
Veja o site de exemplo em docs/example
, que você pode gerar instalando gnrt
, clonando este repositório, movendo para gnrt/docs/example
e executando gnrt
.
Você pode então navegar em http://localhost:8080/
movendo para a pasta public
gerada e executando python3 -m http.server 8080
.
Você também pode conferir um blog ao vivo gerado pelo gnrt e ler este artigo sobre o gnrt.