Skip to main content

Jade syntax adapter for Django, Jinja2 and Mako templates

Project description

PyJade is a high performance port of Jade-lang for python, that converts any .jade source to the each Template-language (Django, Jinja2 or Mako).

NOTE

This package is completely rewritten in the 1.X version for be an exact port of Jade, so may be some backwards incompatibilities.

UTILITIES

To simply output the conversion to your console:

pyjade [-c django|jinja|mako|tornado] input.jade [output.html]

INSTALLATION

First, you must do:

pip install pyjade

Or:

python setup.py install

Now simply name your templates with a `.jade` extension and this jade compiler will do the rest. Any templates with other extensions will not be compiled with the pyjade compiler.

Django

In settings.py, modify TEMPLATE_LOADERS like:

TEMPLATE_LOADERS = (
    ('pyjade.ext.django.Loader',(
        'django.template.loaders.filesystem.Loader',
        'django.template.loaders.app_directories.Loader',
    )),
)

Jinja2

Just add pyjade.ext.jinja.PyJadeExtension as extension:

jinja_env = Environment(extensions=['pyjade.ext.jinja.PyJadeExtension'])

Mako

Just add pyjade.ext.mako.preprocessor as preprocessor:

from pyjade.ext.mako import preprocessor as mako_preprocessor
mako.template.Template(haml_source,
    preprocessor=mako_preprocessor
)

Flask

Just add pyjade.ext.jinja.PyJadeExtension as extension to the environment of the app:

app.jinja_env.add_extension('pyjade.ext.jinja.PyJadeExtension')

Pyramid

Adjust your “your_project/__init__.py” and add the following line somewhere to in the main() function:

config.include('pyjade.ext.pyramid')

Tornado Templates

Append this after importing tornado.template:

from tornado import template
from pyjade.ext.tornado import patch_tornado
patch_tornado()

(...)

Syntax

Exactly the same as the Jade Node.js module (except of cases, which are not implemented) https://github.com/visionmedia/jade/blob/master/Readme.md

Differences

In pyjade you can also escape the default behaviour when rendering attributes just writing != instead of =:

a(href!="{% url ... %}")

NOTE: Currently Django has no mixin support

Example

This code:

!!! 5
html(lang="en")
  head
    title= pageTitle
    script(type='text/javascript')
      if (foo) {
         bar()
      }
  body
    h1.title Jade - node template engine
    #container
      if youAreUsingJade
        p You are amazing
      else
        p Get on it!

Converts to:

<!DOCTYPE html>
<html lang="en">
  <head>
    <title>{{pageTitle}}</title>
    <script type='text/javascript'>
      if (foo) {
         bar()
      }
    </script>
  </head>
  <body>
    <h1 class="title">Jade - node template engine</h1>
    <div id="container">
      {%if youAreUsingJade%}
        <p>You are amazing</p>
      {%else%}
        <p>Get on it!</p>
      {%endif%}
    </div>
  </body>
</html>

TESTING

You must have nose package installed. You can do the tests with:

./test.sh

TODOs and BUGS

See: http://github.com/syrusakbary/pyjade/issues

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

pyjade-1.7.tar.gz (22.4 kB view details)

Uploaded Source

File details

Details for the file pyjade-1.7.tar.gz.

File metadata

  • Download URL: pyjade-1.7.tar.gz
  • Upload date:
  • Size: 22.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for pyjade-1.7.tar.gz
Algorithm Hash digest
SHA256 b93ddb8b079682482f4f3dc71ef88db281f301118d2eeeed621592d3ebb66dc7
MD5 5ae2c797d704062416ffa47dc8c312be
BLAKE2b-256 297d3f52f2b49f98bc3df7b9b8ad57cc96c4eeb5f332cb5b60f7819d3e15ce0c

See more details on using hashes here.

Provenance

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