Jinger - Jinga2 based static site generator
What is Jinger ?
Jinger is a static site (not blog) generator that brings the power and
convenience of `Jinja2`_ python template engine for developing static html
sites. Template inheritance was the main motivation behind developing it,
therefore the use of jinja2 and hence the name
Why another static site generator ?
Ok, to be frank, (as always) I didn't check other alternatives before starting to write code. Also I liked the name that I came up with!
Anyway, I was looking for something that solved the problem of writing and maintaining multiple static web pages using the same layout that allowed code reuse and better organization at the same time. Most of the other stuff I found was more focussed on blogging.
- Command for generating site directory structure with configurable names for directories.
- Development Server.
Nothing other than Jinja2.:
$ pip install Jinja2
Run following command to install (recommended to be run inside a virtualenv):
$ cd jinger $ python setup.py install
Jinger can be uninstalled using pip
$ pip uninstall jinger
Start a new site:
$ jinger startsite <sitename> [options] [options] -s or --sourcedir name of the source template dir [default: templates] -t or --targetdir name of the target dir [default: public]
Generate html from templates:
$ cd mysite $ jinger generate
Run development server:
$ cd mysite $ jinger runserver [options] [options] -p or --port
$ jinger help
You can do almost everything that jinja2 supports. Ofcourse, you won't be able to use context variables as this is a static site generator after all :-)
Check Jinja2's Template Designers' Documentation for more on editing.
Html directory tree will be same as the templates directory tree.
Typically one might want that some types of templates viz. base and
partial templates should not be compiled when the generate command is
run. This can be configured via the
skip_templates setting in the
json config file. As a default setting, files of pattern "base*.html"
(base templates) and "_*.html" (partial templates) are ignored. If you
are happy with the default settings, then name your base templates and
partial templates according to this. Otherwise you are free to modify
the setting to your taste.
Important: This setting is in form of a list of Unix style wildcard patterns (and NOT regex).
examples/mysite for more info and further section for running the
When jinger creates a new site upon running the
a directory named
webassets is also created where you should place
any css, js, images etc for your site. Note that the choice of name
for this directory is not configurable unlike the
targetdir directories. This is because the generate command will
copy all the contents of this dir into the
targetdir from where it
will be served.
for eg. if you have following files and directories inside webassets
webassets/ js/ main.js css/ styles.css images/ logo.png
generate these will be copied to
public/ js/ main.js css/ styles.css images/ logo.png
Note however that when running the development server, these files
will be served directly from inside
Including the webassets in your jinja2 template files
To include the css/js/images in the templates, just use their path
webassets such as
<link rel="stylesheet" type="text/css" href="css/styles.css"/>
Running the example
Examples can be run without installation as follows:
To create a new site, first create a symlink of
examples or any other directory where you want to use the
commands (These symlinks will be ignored by git):
$ cd examples $ ln -s ../jinger/commands.py commands.py $ python commands.py startsite newsite $ cd newsite $ ln -s ../../jinger/commands.py commands.py $ echo "<h1>It works!</h1>" > templates/index.html $ python commands.py runserver
Then open http://127.0.0.1:9000/ in your favourite browser.
To compile templates to markup:
$ cd newsite $ python commands.py generate
Use the test runner module to run tests as follows:
$ cd jinger $ python testrunner.py # will run all tests in jinger/test $ python testrunner.py site # will run jinger/test/test_site.py
When the tests are run, directories and files will be created in
directory and will be deleted in tearDown. Ignore this dir if you don't need
to run tests.
Please use github issue tracker to submit any bugs
All kinds of feedback is welcome :)