Skip to main content

An integrated web templating environment

Project description

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

                           +--------+
                           |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

+------+    +---------+      +-------------+
|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.myblog layout for publishing my blog articles.

    • It is possible to create any number of layout either as part of pagd tool 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.

  • everything that needs to get done by pagd is done through pagd command 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.py module 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.myblog layout 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.json attribute google_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, 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.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pagd-0.21dev.tar.gz (35.4 kB view hashes)

Uploaded Source

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page