forked from github.com/blag
268
docs/blag.rst
Normal file
268
docs/blag.rst
Normal file
@@ -0,0 +1,268 @@
|
|||||||
|
Manual
|
||||||
|
======
|
||||||
|
|
||||||
|
|
||||||
|
Quickstart
|
||||||
|
----------
|
||||||
|
|
||||||
|
Install blag from PyPI_
|
||||||
|
|
||||||
|
.. code-block:: sh
|
||||||
|
|
||||||
|
$ pip install blag
|
||||||
|
|
||||||
|
.. _pypi: https://pypi.org/project/blag/
|
||||||
|
|
||||||
|
Run blag's quickstart command to create the configuration needed
|
||||||
|
|
||||||
|
.. code-block:: sh
|
||||||
|
|
||||||
|
$ blag quickstart
|
||||||
|
|
||||||
|
Create some content
|
||||||
|
|
||||||
|
.. code-block:: sh
|
||||||
|
|
||||||
|
$ mkdir content
|
||||||
|
$ edit content/hello-world.md
|
||||||
|
|
||||||
|
Generate the website
|
||||||
|
|
||||||
|
.. code-block:: sh
|
||||||
|
|
||||||
|
$ blag build
|
||||||
|
|
||||||
|
By default, blag will search for content in ``content`` and the output will be
|
||||||
|
generated in ``build``. All markdown files in ``content`` will be converted to
|
||||||
|
html, all other files (i.e. static files) will be copied over).
|
||||||
|
|
||||||
|
If you want more separation between the static files and the markdown content,
|
||||||
|
you can put all static files into the ``static`` directory. Blag will copy
|
||||||
|
them over to the ``build`` directory.
|
||||||
|
|
||||||
|
If you want to customize the looks of the generated site, create a
|
||||||
|
``template`` directory and put your jinja2 templates here.
|
||||||
|
|
||||||
|
Those directories can be changed via command line arguments. See
|
||||||
|
|
||||||
|
.. code-block:: sh
|
||||||
|
|
||||||
|
$ blag --help
|
||||||
|
|
||||||
|
|
||||||
|
Manual
|
||||||
|
------
|
||||||
|
|
||||||
|
|
||||||
|
Pages and Articles
|
||||||
|
^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
Internally, blag differentiates between **pages** and **articles**.
|
||||||
|
Intuitively, pages are simple pages and articles are blog posts. The decision
|
||||||
|
whether a document is a page or an article is made depending on the presence
|
||||||
|
of the ``date`` metadata element: Any document that contains the ``date``
|
||||||
|
metadata element is an article, everything else a page.
|
||||||
|
|
||||||
|
This differentiation has consequences:
|
||||||
|
|
||||||
|
* blag uses different templates: ``page.html`` and ``article.html``
|
||||||
|
* only articles are collected in the Atom feed
|
||||||
|
* only articles are aggregated in the tag pages
|
||||||
|
|
||||||
|
blag does **not** enforce a certain directory structure for pages and
|
||||||
|
articles. You can mix and match them freely or structure them in different
|
||||||
|
directories. blag will mirror the structure found in the ``content`` directory
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
content/
|
||||||
|
article1.md
|
||||||
|
article2.md
|
||||||
|
page1.md
|
||||||
|
|
||||||
|
results in:
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
build/
|
||||||
|
article1.html
|
||||||
|
article2.html
|
||||||
|
page1.html
|
||||||
|
|
||||||
|
Arbitrary complex structures are possible too:
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
content/
|
||||||
|
posts/
|
||||||
|
2020/
|
||||||
|
2020-01-01-foo.md
|
||||||
|
2020-02-01-foo.md
|
||||||
|
pages/
|
||||||
|
foo.md
|
||||||
|
bar.md
|
||||||
|
|
||||||
|
results in:
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
build/
|
||||||
|
posts/
|
||||||
|
2020/
|
||||||
|
2020-01-01-foo.html
|
||||||
|
2020-02-01-foo.html
|
||||||
|
pages/
|
||||||
|
foo.html
|
||||||
|
bar.html
|
||||||
|
|
||||||
|
|
||||||
|
Static Files
|
||||||
|
^^^^^^^^^^^^
|
||||||
|
|
||||||
|
Static files can be put into the ``content`` directory and will be copied over
|
||||||
|
to the ``build`` directory as well. If you want better separation between
|
||||||
|
content and static files, you can create a ``static`` directory and put the
|
||||||
|
files there. All files and directories found in the ``static`` directory will
|
||||||
|
be copied over to ``build``.
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
content/
|
||||||
|
foo.md
|
||||||
|
bar.md
|
||||||
|
kitty.jpg
|
||||||
|
|
||||||
|
results in:
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
build/
|
||||||
|
foo.html
|
||||||
|
bar.html
|
||||||
|
kitty.jpg
|
||||||
|
|
||||||
|
Alternatively:
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
content/
|
||||||
|
foo.md
|
||||||
|
bar.md
|
||||||
|
static/
|
||||||
|
kitty.jpg
|
||||||
|
|
||||||
|
results in:
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
build/
|
||||||
|
foo.html
|
||||||
|
bar.html
|
||||||
|
kitty.jpg
|
||||||
|
|
||||||
|
|
||||||
|
Internal Links
|
||||||
|
--------------
|
||||||
|
|
||||||
|
In contrast to most other static blog generators, blag will automatically
|
||||||
|
convert **relative** markdown links. That means you can link you content using
|
||||||
|
relative markdown links and blag will convert them to html automatically. The
|
||||||
|
advantage is that your content tree in markdown is consistent and
|
||||||
|
self-contained even if you don't generate html from it.
|
||||||
|
|
||||||
|
|
||||||
|
.. code-block:: markdown
|
||||||
|
|
||||||
|
[...]
|
||||||
|
this is a [link](foo.md) to an internal page foo.
|
||||||
|
|
||||||
|
becomes
|
||||||
|
|
||||||
|
.. code-block:: html
|
||||||
|
|
||||||
|
<p>this is a <a href="foo.html">link</a> to an internal page foo.</p>
|
||||||
|
|
||||||
|
|
||||||
|
Templating
|
||||||
|
----------
|
||||||
|
|
||||||
|
Custom templates are **optional** and stored by default in the ``templates``
|
||||||
|
directory. blag will search the ``templates`` directory first, and fall back
|
||||||
|
to blag's default built-in templates.
|
||||||
|
|
||||||
|
============ ====================================== ===================
|
||||||
|
Template Used For Variables
|
||||||
|
============ ====================================== ===================
|
||||||
|
page.html pages (i.e. non-articles) site, content, meta
|
||||||
|
article.html articles (i.e. blog posts) site, content, meta
|
||||||
|
archive.html archive- and landing page of the blog site, archive
|
||||||
|
tags.html list of tags site, tags
|
||||||
|
tag.html archive of Articles with a certain tag site, archive, tag
|
||||||
|
============ ====================================== ===================
|
||||||
|
|
||||||
|
If you make use of Jinja2's template inheritance, you can of course have more
|
||||||
|
template files in the ``templates`` directory.
|
||||||
|
|
||||||
|
``site``
|
||||||
|
This dictionary contains the site configuration, namely: ``base_url``,
|
||||||
|
``title``, ``description`` and ``author``. Don't confuse the site-title
|
||||||
|
and -description with the title and description of individual pages or
|
||||||
|
articles.
|
||||||
|
|
||||||
|
``content``
|
||||||
|
HTML, converted from markdown.
|
||||||
|
|
||||||
|
``meta``
|
||||||
|
``meta`` stands for all metadata elements available in the article or
|
||||||
|
page. Please be aware that those are not wrapped in a dictionary, but
|
||||||
|
**directly** available as variables.
|
||||||
|
|
||||||
|
``archive``
|
||||||
|
A list of ``[destination path, context]`` tuples, where the context are
|
||||||
|
the respective variables that would be provided to the individual page or
|
||||||
|
article.
|
||||||
|
|
||||||
|
``tags``
|
||||||
|
List of tags.
|
||||||
|
|
||||||
|
``tag``
|
||||||
|
A tag.
|
||||||
|
|
||||||
|
|
||||||
|
Metadata
|
||||||
|
---------
|
||||||
|
|
||||||
|
blag supports metadata elements in the markdown files. They must come before
|
||||||
|
the content and should be separated from the content with a blank line:
|
||||||
|
|
||||||
|
.. code-block:: markdown
|
||||||
|
|
||||||
|
title: foo
|
||||||
|
date: 2020-02-02
|
||||||
|
tags: this, is, a, test
|
||||||
|
description: some subtitle
|
||||||
|
|
||||||
|
this is my content.
|
||||||
|
[...]
|
||||||
|
|
||||||
|
blag supports *arbitrary* metadata in your documents, and you can use them
|
||||||
|
freely in you templates. However, some metadata elements are treated special:
|
||||||
|
|
||||||
|
``date``
|
||||||
|
If a document contains the ``date`` element, it is treated as an
|
||||||
|
**article**, otherwise as a **page**. Additionally, ``date`` elements are
|
||||||
|
expected to be in ISO format (e.g. ``1980-05-05 21:58``). They are
|
||||||
|
automatically converted into ``datetime`` objects with the local timezone
|
||||||
|
attached.
|
||||||
|
|
||||||
|
``tags``
|
||||||
|
Tags are interpreted as a comma separated list. All elements are stripped
|
||||||
|
and converted to lower-case: ``tags: foo, Foo Bar, BAZ`` becomes: ``[foo,
|
||||||
|
foo bar, baz]``.
|
||||||
|
|
||||||
|
Tags in **articles** are also used to generate the tag-pages, that
|
||||||
|
aggregate all articles per tag.
|
||||||
|
|
||||||
|
``title`` and ``description``
|
||||||
|
The title and description are used in the html header and in the atom
|
||||||
|
feed.
|
||||||
@@ -42,7 +42,7 @@ Documentation
|
|||||||
:caption: Contents:
|
:caption: Contents:
|
||||||
|
|
||||||
|
|
||||||
quickstart.rst
|
blag.rst
|
||||||
api.rst
|
api.rst
|
||||||
|
|
||||||
Indices and tables
|
Indices and tables
|
||||||
|
|||||||
@@ -1,29 +0,0 @@
|
|||||||
Quickstart
|
|
||||||
==========
|
|
||||||
|
|
||||||
Install blag from PyPI_::
|
|
||||||
|
|
||||||
$ pip install blag
|
|
||||||
|
|
||||||
.. _pypi: https://pypi.org/project/blag/
|
|
||||||
|
|
||||||
Run blag's quickstart command to create the configuration needed::
|
|
||||||
|
|
||||||
$ blag quickstart
|
|
||||||
|
|
||||||
Create some content::
|
|
||||||
|
|
||||||
$ mkdir content
|
|
||||||
$ edit content/hello-world.md
|
|
||||||
|
|
||||||
Generate the website::
|
|
||||||
|
|
||||||
$ blag build
|
|
||||||
|
|
||||||
By default, blag will search for content in ``content`` and the output will be
|
|
||||||
generated in ``build``. Those directories can be changed via command line
|
|
||||||
arguments. See::
|
|
||||||
|
|
||||||
$ blag --help
|
|
||||||
|
|
||||||
|
|
||||||
Reference in New Issue
Block a user