Volt
Charge up your static website
Volt is a Python static website generator, with:
-
Automatic pagination
Say you have a blog with 10 posts, each with its own set of tags that might might not be present in all posts. By only by supplying the URL pattern, Volt can generate the pages containing each blog post categorized by tag, paginated to your liking.
For example, you only need to supply
tag/{tags}
and Volt will generate links to the pagestag/foo
,tag/bar
,tag/baz
, where each of these page will contain all the posts sharing that tag.And this doesn't apply only to tags. You can use it to create pages based on authors, time (year, day, date, whatever you want), and any other data you put in your posts.
All with a simple URL pattern in the configuration file, like so
PAGINATIONS = ('', 'tag/{tags}', '{time:%Y}', '{time:%Y/%m}', '{time:%Y/%m/%d}')
-
Auto-regenerating built-in server
Static sites need to be generated repeatedly to reflect changes in their source. After a while, doing this becomes cumbersome and annoying. Volt's server automatically generates your static site whenever it detects changes in the source and the configuration file, so you can focus on experimenting with your actual site contents.
-
Modularity and extensibility
Under the hood, Volt is actually a collection of different engines responsible for different sections of your site. The blog engine, for example generates the blog section of your site, while the plain engine, generates simple web pages. See how simple the blog engine code is or take a peek at the main site generator function to get a picture of how the engines work.
Finally, Volt comes with a plugin architecture that lets you hook into the engines' actions. Seven plugins comes packed in with volt:
- Atom feed generator plugin (atomic, no extra dependency)
- Markup processing plugins:
- reStructured text (rst_parser, requires docutils)
- Markdown (markdown_parser, requires python-markdown
- Textile (textile_parser, requires python-textile)
- Syntax highlighter plugin (syntax, requires pygments)
- CSS minifier plugin (css_minifier, requires cssmin)
- Javascript minifier plugin (js_minifier, requires jsmin)
Browse their code to see how you can easily write your own plugin.
-
Centrally-managed configuration with flexible options
Sort your content according to time, or title, or author name, or tags, anything you want. Set global values for all content, e.g. authors for all blog posts. Define your own Jinja2 tests or filters. Set the plugin options. You can do all these in Volt through one central configuration file:
voltconf.py
, conveniently accessible in your project folder. -
... other perks of static websites: easy deployment, easy back-up, and more.
INSTALLATION
Latest version from PyPI (0.0.3): pip install volt
Bleeding edge from main development repo: pip install git+https://github.com/bow/volt.git
Volt is still in alpha and under development. Things will break here and there.
Dependency:
Optional dependencies:
-
python-markdown
(installed by default for
volt demo
, can be safely removed if not used)
Python versions:
- Volt is tested against CPython versions 2.6, 2.7, 3.3, 3.4, and PyPy 2.7.8.
USAGE
Go through a superquick demo of Volt by running volt demo
in an empty
directory and opening localhost:8000
in your browser.
Here's a quick summary of the currently available commands:
-
volt init
: Starts a Volt project, must be run inside an empty directory. Thevoltconf.py
file created by this command currently contains almost all the default settings. You can safely edit or remove them. -
volt demo
: Starts the demo, must be run inside an empty directory. -
volt gen
: Generates the website into asite
folder in your current project directory. -
volt serve
: Generates the website and Starts the server pointing to thesite
directory. -
volt ext
: Adds a template for writing your custom engine, plugin, or widget. Custom engines and plugins are stored respectively inside theengines
andplugins
directory in the root Volt project directory. Widgets are stored insidewidgets.py
in the same directory. You can also specify an additional--builtin
to copy a builtin engine/plugin/widget to your Volt project directory. -
volt version
: Shows the current Volt version.
All of the commands except for init
and demo
can be run from anywhere
inside a Volt project directory.