Pagd
Static site generator in python.
Install / Use
/learn @pluggdapps/PagdREADME
Overview
Static web site generator, based on well understood MVC_ - Model, View, Controller - design philosophy. The general idea behind MVC from web application's perspective is
.. code-block:: text
+--------+
|template|
+--------+
|
V
+-------+ +----------+ +------+ +-----+
|request|-->|controller|--->|action|<---|model|
+-------+ +----------+ +------+ +-----+
|
V
+---------+
|HTML page|
+---------+
|
V
goes to the client +-------------+
<---------------------|http-response|
+-------------+
The general idea being that,
- http request reaches web-application's controller logic.
- controller resolves request to web-action by parsing request-URL.
- the action-logic gathers necessary context information from database models and other sources.
- a html-template is identified, and the final HTML page is generated using context information from models and page-layout from one or more template files.
pagd follows, more or less, a similar principle to build a web-site from a
collection of files organised as a directory tree. Here is a brief idea on how
it is done
.. code-block:: text
+------+ +---------+ +-------------+
|layout|--->|generator|<---->|page-iterator|
+------+ +---------+ +-------------+
| ^
| | +------------+
V +<---------|page-context|
+---------+ | +------------+
|Html-page| |
+---------+ | +-------------+
| +<---------|page-template|
| | +-------------+
V +------------+
+--------+ |page-content|
|web-site| +------------+
+--------+
Features
-
generates static output, hence can be hosted anywhere.
-
pluggable layouts.
- I am currently using
pagd.mybloglayout for publishing my blog articles. - It is possible to create any number of layout either as part of
pagdtool or as separate package. - although layouts are encouraged to follow the Model-View-Controller concept explained above, it is up to the layout-plugin to define a structure and meaning of layout's source directory-tree.
- I am currently using
-
everything that needs to get done by pagd is done through
pagdcommand line interface. -
command line interface comes with simple sub-commands like,
create, to create a new layout.gen, to generate static web site from a source layout.
-
sub-commands are plugins and can be extended by implementing pagd.interfaces.ICommand interface.
-
to use pagd as python library, refer to
script.pymodule under pagd package. -
web-site templates can be designed using
tayra template_.- experimental feature is available for mako and jinja2. If you face problems with these templates, kindly let me know.
-
reStructuredText directives,
- code syntax highlighting.
- play youtube video within page content.
- display collection of images as gallery, uses magnific-popup_ jquery plugin. Magnific-popop is a well documented jquery plugin, it is possible to change its CSS file and/or pagd template script to customize it in many ways.
- to embed github gist, entire gist or individual file in a gist.
-
pagd.mybloglayout is loaded with batteries.- write blog articles in reStructured text, markdown, plain-text, html or even as tayra-templates.
- template your site using tayra templates.
- configure site generation using JSON file.
- add context to individual pages are all pages under a sub-directory through one or more JSON files.
- use google-webfonts_ by configuring CSS links using
config.jsonattributegoogle_webfonts. - integration with disqus commenting system. Comments will be stored in disqus' server.
- integration with git, mercurial repository to gather file's meta-data like page's author, email, created-time, last-modified-time etc..., this is entirely optional.
- social sharing with twitter, facebook, hackernews, google+, reddit, linkedin etc...
- includes jquery, template can be customized with jquery plugins.
- learn more - pagd.myblog_.
-
only part that cannot be configured, customized or entirely replaced, is the name of the tool ;)
-
License:
GPLv3 license_ -
Requires: Linux/OS-X, Python-3.x, Pluggdapps.
- To interpret markdown text, python-markdown_ needs to be installed.
- To interpret rst text, docutils_ needs to be installed.
- To interpret raw-html, python-lxml_ needs to be installed.
- If you need source code highlighting in your rst text, pygments_ and docutils_ needs to be installed.
- To template with jinja2 or mako corresponding packages need to be installed.
-
Status: Core design stable. Not expected to change.
Refer to glossary_ and documentation for default layout pagd.myblog_.
Related links
package documentation_.- changelog_.
- todo_.
- mailing-list_ - if you have any problem just ask !!
pagd is under development - you can hack the code, contribute back with
github <https://github.com/prataprc/pagd>_. Note that the original
repository is maintained with mercurial and uses hg-git plugin to publish it
on github.
.. _MVC: http://en.wikipedia.org/wiki/Model-view-controller .. _GPLv3 license: http://www.gnu.org/licenses/ .. _python-markdown: https://pypi.python.org/pypi/Markdown .. _docutils: https://pypi.python.org/pypi/docutils .. _pygments: https://pypi.python.org/pypi/pygments .. _python-lxml: https://pypi.python.org/pypi/lxml .. _google-webfonts: http://www.google.com/fonts .. _magnific-popup: https://github.com/dimsemenov/Magnific-Popup
.. _tayra template: http://pythonhosted.org/tayra .. _pagd.myblog: http://pythonhosted.org/pagd/myblog.html .. _glossary: http://pythonhosted.org/pagd/glossary.html .. _package documentation: http://pythonhosted.org/pagd .. _changelog: http://pythonhosted.org/pagd/CHANGELOG.html .. _todo: http://pythonhosted.org/pagd/TODO.html .. _mailing-list: http://groups.google.com/group/pluggdapps
