Skip to main content

HAML like syntax for Django templates. Fork of unmainted hamlpy.

Project description

Introduction

Fork of https://github.com/jessemiller/HamlPy because it seems unmaintained since Aug 2013 and that it’s not compatible with django>=1.9. 3 years seemed a reasonable time to consider forking.

Since I don’t want to redo the previous of no maintainership (and that I don’t have a special interest in being the sole maintainer) I’m looking for 1-3 other people to co-maintained this project.

Major differences with the original hamlpy:

You might also be interested in hamlpy3 which is a python 3 only version of hamlpy. Supporting both python 2 and python 3 in django-hamlpy would be great.

Thanks a lot to Jesse Miller for his work, it really helped me a lot.

django-hamlpy

HamlPy (pronounced “haml pie”) is a tool for Django developers who want to use a Haml like syntax for their templates. HamlPy is not a template engine in itself but simply a compiler which will convert HamlPy files into templates that Django can understand.

But wait, what is Haml? Haml is an incredible template engine written in Ruby used a lot in the Rails community. You can read more about it here.

Installing

Stable release

The latest stable version of HamlPy can be installed using pip (pip install django-hamlpy)

Development

The latest development version can be installed directly from GitHub:

pip install git+https://github.com/psycojoker/django-hamlpy

Syntax

Almost all of the XHTML syntax of Haml is preserved.

#profile
    .left.column
        #date 2010/02/18
        #address Toronto, ON
    .right.column
        #bio Jesse Miller

turns into..

<div id='profile'>
    <div class='left column'>
        <div id='date'>2010/02/18</div>
        <div id='address'>Toronto, ON</div>
    </div>
    <div class='right column'>
        <div id='bio'>Jesse Miller</div>
    </div>
</div>

The main difference is instead of interpreting Ruby, or even Python we instead can create Django Tags and Variables

%ul#athletes
    - for athlete in athlete_list
        %li.athlete{'id': 'athlete_{{ athlete.pk }}'}= athlete.name

turns into..

<ul id='athletes'>
    {% for athlete in athlete_list %}
        <li class='athlete' id='athlete_{{ athlete.pk }}'>{{ athlete.name }}</li>
    {% endfor %}
</ul>

Usage

Option 1: Template loader

The template loader was originally written by Chris Hartjes under the name ‘djaml’. This project has now been merged into the django-hamlpy codebase.

Add the django-hamlpy template loaders to the Django template loaders:

TEMPLATE_LOADERS = (
    'hamlpy.template.loaders.HamlPyFilesystemLoader',
    'hamlpy.template.loaders.HamlPyAppDirectoriesLoader',
    ...
)

If you don’t put the django-hamlpy template loader first, then the standard Django template loaders will try to process it first. Make sure your templates have a .haml or .hamlpy extension, and put them wherever you’ve told Django to expect to find templates (TEMPLATE_DIRS).

Template caching

For caching, just add django.template.loaders.cached.Loader to your TEMPLATE_LOADERS:

TEMPLATE_LOADERS = (
    ('django.template.loaders.cached.Loader', (
        'hamlpy.template.loaders.HamlPyFilesystemLoader',
        'hamlpy.template.loaders.HamlPyAppDirectoriesLoader',
        ...
    )),
)
Settings

Following values in Django settings affect haml processing:

  • HAMLPY_ATTR_WRAPPER – The character that should wrap element attributes. This defaults to ‘ (an apostrophe).

Option 2: Watcher

HamlPy can also be used as a stand-alone program. There is a script which will watch for changed hamlpy extensions and regenerate the html as they are edited:

usage: hamlpy-watcher [-h] [-v] [-i EXT [EXT ...]] [-ext EXT] [-r S]
                    [--tag TAG] [--attr-wrapper {",'}]
                    input_dir [output_dir]

positional arguments:
input_dir             Folder to watch
output_dir            Destination folder

optional arguments:
-h, --help            show this help message and exit
-v, --verbose         Display verbose output
-i EXT [EXT ...], --input-extension EXT [EXT ...]
                        The file extensions to look for
-ext EXT, --extension EXT
                        The output file extension. Default is .html
-r S, --refresh S     Refresh interval for files. Default is 3 seconds
--tag TAG             Add self closing tag. eg. --tag macro:endmacro
--attr-wrapper {",'}  The character that should wrap element attributes.
                        This defaults to ' (an apostrophe).
--jinja               Makes the necessary changes to be used with Jinja2

Or to simply convert a file and output the result to your console:

hamlpy inputFile.haml

Or you can have it dump to a file:

hamlpy inputFile.haml outputFile.html

Optionally, --attr-wrapper can be specified:

hamlpy inputFile.haml --attr-wrapper='"'

Using the --jinja compatibility option adds macro and call tags, and changes the empty node in the for tag to else.

For HamlPy developers, the -d switch can be used with hamlpy to debug the internal tree structure.

Create message files for translation

There is a very simple solution.

django-admin.py makemessages --settings=<project.settings> -a --extension haml,html,py,txt

Where:

  • project.settings – Django configuration file where module “hamlpy” is configured properly.

Reference

Check out the reference.md file for a complete reference and more examples.

Status

HamlPy currently:

  • has no configuration file. which it should for a few reasons, like turning off what is autoescaped for example

  • does not support some of the filters yet

Contributing

Very happy to have contributions to this project. Please write tests for any new features and always ensure the current tests pass. You can run the tests from the base direcotry by running

python setup.py nosetests

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

django-hamlpy-0.83.tar.gz (17.6 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

django_hamlpy-0.83-py2.py3-none-any.whl (21.7 kB view details)

Uploaded Python 2Python 3

django_hamlpy-0.83-py2.7.egg (17.5 kB view details)

Uploaded Egg

File details

Details for the file django-hamlpy-0.83.tar.gz.

File metadata

  • Download URL: django-hamlpy-0.83.tar.gz
  • Upload date:
  • Size: 17.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for django-hamlpy-0.83.tar.gz
Algorithm Hash digest
SHA256 7840874f82f018d646467ca0ebb77dbf25f8e0794d396cc2e49908e25e9f10fd
MD5 b8e7be1d5f7ec7a476dfe93b4293f698
BLAKE2b-256 4b93f65fe93eb0fc79c34ae22b7d114c39a56b4a2b5b4e6670b69d23a3f9f7e6

See more details on using hashes here.

File details

Details for the file django_hamlpy-0.83-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for django_hamlpy-0.83-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 95bbf5fc20d11200550923660d1f7623c37ac2021ebd9f046a1e3702ca0887ac
MD5 8fa6ae5b9c2690206cc7ad1892f2f68a
BLAKE2b-256 02d22b641e7703c5afa67f9a745b4a3425f2e48f194b12bb39147d61afbeb3f0

See more details on using hashes here.

File details

Details for the file django_hamlpy-0.83-py2.7.egg.

File metadata

File hashes

Hashes for django_hamlpy-0.83-py2.7.egg
Algorithm Hash digest
SHA256 e817eef04d25680aba50629ad157e804a0ca985917dbc0184898082dcb2e3c1b
MD5 bb72898cc1d278e417841329f363d8c4
BLAKE2b-256 c1fba62de0f92412b3ccbb10e7cc5cc9176718aea923f91b835f4e3fd611c424

See more details on using hashes here.

Supported by

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