Skip to main content

Lightweight jinja2 template prototyping server

Project description

Description
===========

Breakdown is a lightweight python webserver that parses jinja2 templates. It's intended to be used by designers for doing rapid prototyping.


Basic Usage
===========

Breakdown needs a ``templates`` directory and a ``static`` directory to serve from. If your working directory contains these, you can simply run breakdown with no arguments::

$ breakdown

Or, you can specify the path to a directory containing ``templates`` and ``static``::

$ breakdown /path/to/project

Breakdown will also work with a django project structure. If the project path contains an ``apps`` directory, breakdown will automatically detect this and combine the ``static`` and ``templates`` directories for each django app. You'll also get a listing of the directories it found. Here's the output of running breakdown on a django project with two apps: 'mainsite' and 'blog'::

$ breakdown ~/django/myproject
Serving templates from:
/Users/josh/django/myproject/apps/blog/templates
/Users/josh/django/myproject/apps/mainsite/templates

Serving static data from:
/Users/josh/django/myproject/apps/blog/static
/Users/josh/django/myproject/apps/mainsite/static

Template Context Objects
------------------------

When loading a template, breakdown will attempt to load a json dictionary of the same name from the context directory (``context`` by default) and add it to the page context. For example, when loading ``base.html`` breakdown will try to load ``<project root>/context/base.json``, and when loading ``blog/article_detail.html`` breakdown will look for ``<project root>/context/blog/article_detail.json``.

Objects defined in a context dictionary become available to the template. For example, if we define ``base.json`` like this::

{
"request": {
"user": {
"name":"Austin",
"member": "Member #4812"
}
},
"object": {
"id": 555,
"title": "Excellent Blog Post"
}
}

then ``request`` and ``object`` become available to the ``base.html`` template, and ``{{request.user.name}}`` yields ``Austin``.

You can specify a function by adding a key with trailing parentheses::

{
"request": {
"user": {
"name":"Austin",
"is_authenticated()": true,
"birth_year()": 1982,
"middle_name()": "David",
"member": "Member #4812"
}
}
}

The trailing parentheses are removed, and now ``{{request.user.is_authenticated()}}`` returns ``True``. Functions defined in this way ignore any arguments and return the value specified in the json dictionary. ``{{request.user.is_authenticated(arg1, arg2, arg3)}}`` also returns ``True``.


Viewing Templates
-----------------

Once breakdown is running, it will print the local URL the webserver is listening on::

Server running at http://127.0.0.1:5000 ...

You can now view templates in your browser by navigating to http://127.0.0.1:5000. However, you won't see anything here unless one of your template directories contains a file named ``index.html``. The URL of any template (besides ``index.html``) will be identical to its filename, with all relative paths preserved. Below is an example of template filenames and their corresponding URL on the local server:

==================== ====================================
**Template** **URL**
-------------------- ------------------------------------
index.html http://127.0.0.1:5000/
article.html http://127.0.0.1:5000/article
blog/index.html http://127.0.0.1:5000/blog
blog/post.html http://127.0.0.1:5000/blog/post
==================== ====================================

*Note: The server will accept template URLs with or without .html appended to them*

Additional Features
===================

Template tags
-------------

For convenience, A few template functions have been added to the `jinja2 template API <http://jinja.pocoo.org/docs/templates/>`_:

################
{{ greeking() }}
################

Generates a block of randomized lorem ipsum text marked-up with various HTML elements: ``<em>``, ``<strong>``, ``<code>``, ``<a>``, ``<ol>``, and ``<ul>``.

##########################
{{ image(width, height) }}
##########################

If you have `PIL <http://www.pythonware.com/products/pil/>`_ installed, you can use this function to generate an ``<img>`` tag with a sample image of the specified size (without PIL, the width/height are ignored and you get a large sample image)

##########################
{{ url(*args, **kwargs) }}
##########################

Ignores all arguments and returns ``'#'``.

CleverCSS
---------

Breakdown also supports automatic `CleverCSS <http://http://sandbox.pocoo.org/clevercss/>`_ parsing. If the file ``foo.css`` is requested and not found, breakdown will then look for a matching ``foo.clevercss`` and compile it to vanilla css on the fly.


Advanced
========

**Command line options**:
-h, --help show this help message and exit
-p PORT, --port=PORT run server on an alternate port (default is 5000)
-m, --media treat MEDIA_URL as STATIC_URL in templates
-v, --version display the version number and exit
-c DIR, --context_dir_name=DIR set the directory name for context object files (default is ``context``)

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

breakdown-1.0.3.tar.gz (7.6 kB view details)

Uploaded Source

File details

Details for the file breakdown-1.0.3.tar.gz.

File metadata

  • Download URL: breakdown-1.0.3.tar.gz
  • Upload date:
  • Size: 7.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for breakdown-1.0.3.tar.gz
Algorithm Hash digest
SHA256 5114d7510037d134479b3305d9e3684f78902b17b00bfb237428dc0c9a17af05
MD5 04c99bcefab27afdaa25f1442bb12d20
BLAKE2b-256 86691671b3a938f07a7ccb527dc7b434900f103e7b404d178abd35cd8bbb78c9

See more details on using hashes here.

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