Skip to main content

PugJS syntax template adapter for Django, Jinja2, Mako and Tornado templates - copy of PyJade with the name changed

Project description

PyPugJS BuildStatus

PyPugJS is a fork of PyJade with the name Jade changed to PugsJS.

Additional disclaimer: Since the original pypugjs died i took the liberty to keep it alive, because since starting to work with the jade compiler for node I hate writing HTML and want to continue using it in my Django projects. I will keep the existing non Django stuff inside the project, but I canot supportanything other since I’m not actively using it not will be in the foreseeable future. Tornado, Mako etc. support will be welcome tho!

PyPugJS is a high performance port of PugJS for python, that converts any .pug source into different Template-languages (Django, Jinja2, Mako or Tornado).

UTILITIES

To simply output the conversion to your console:

pypugjs [-c django|jinja|mako|tornado] input.pug [output.html]

INSTALLATION

To install pypugjs:

pip install pypugjs

Or:

python setup.py install

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

Django

In settings.py, add a loader to TEMPLATES like so:

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [
            os.path.join(BASE_DIR, 'templates')
        ],
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
            'loaders': [
                # PyPugJS part:   ##############################
                ('pypugjs.ext.django.Loader', (
                    'django.template.loaders.filesystem.Loader',
                    'django.template.loaders.app_directories.Loader',
                ))
            ],
            'builtins': [
                'pypugjs.ext.django.templatetags',
            ],
        },
    },
]

In case you want to use Djangos translation feature, be sure to put this import statement at the top of your settings.py.

import pypugjs.ext.django # noqa

Jinja2

Just add pypugjs.ext.jinja.PyPugJSExtension as extension

jinja_env = Environment(extensions=['pypugjs.ext.jinja.PyPugJSExtension'])

Mako

Just add pypugjs.ext.mako.preprocessor as preprocessor

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

Flask

Just add pypugjs.ext.jinja.PyPugJSExtension as extension to the environment of the app

app.jinja_env.add_extension('pypugjs.ext.jinja.PyPugJSExtension')

Pyramid

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

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

Tornado Templates

Append this after importing tornado.template

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

(...)

Syntax

Generally the same as the PugJS Node.js module (except of cases and several other features, which are not implemented) https://github.com/pugjs/pug/blob/master/README.md

Example

This code

!!! 5
html(lang="en")
  head
    title= pageTitle
    script(type='text/javascript')
      if (foo) {
         bar()
      }
  body
    h1.title PugJS - node template engine
    #container
      if youAreUsingPugJS
        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">PugJS - node template engine</h1>
    <div id="container">
      {%if youAreUsingPugJS%}
        <p>You are amazing</p>
      {%else%}
        <p>Get on it!</p>
      {%endif%}
    </div>
  </body>
</html>

Register filters

If you want to register a function as a filter, you only have to decorate the function with pypugjs.register_filter("filter_name")

import pypugjs

@pypugjs.register_filter('capitalize')
def capitalize(text,ast):
  return text.capitalize()

Notable Features

Adding conditional classes:

a(class={‘active-class’: True, ‘another’: False})

TESTING

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

./test.sh

TODOs and BUGS

See: https://github.com/kakulukia/pypugjs/issues

ChangeLog

  • conditional classes feature (thx to paradoxxxzero)

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

pypugjs-5.1.0.tar.gz (30.7 kB view details)

Uploaded Source

Built Distributions

pypugjs-5.1.0-py3-none-any.whl (38.1 kB view details)

Uploaded Python 3

pypugjs-5.1.0-py2.py3-none-any.whl (38.3 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file pypugjs-5.1.0.tar.gz.

File metadata

  • Download URL: pypugjs-5.1.0.tar.gz
  • Upload date:
  • Size: 30.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for pypugjs-5.1.0.tar.gz
Algorithm Hash digest
SHA256 4286261c723b5d4659c6c3b64e663db30c83974689839b904324776af9176dda
MD5 78727ee0c6fe150dd0f8a326069efd3d
BLAKE2b-256 6b49ac21d42b2351203a9163b376ec3680959599a67b8dc0c9372f7a25423037

See more details on using hashes here.

File details

Details for the file pypugjs-5.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for pypugjs-5.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 e5277dfd99029810af858960e8968f5d98a1ec858ae7011163ddbc7947659afd
MD5 05b2a94935a2878f7e558748893ccd79
BLAKE2b-256 58e2b92ea559cdc241fd97d4fe0f9617ae24e767ac15c52cbf7971a92d27c48c

See more details on using hashes here.

File details

Details for the file pypugjs-5.1.0-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for pypugjs-5.1.0-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 6ee87ab83637f3c3acfd02d054532a4c35e5ca3cf529a8eae750c3e8da0d41ed
MD5 739d911ffa849dc3185a747a1c60c1ed
BLAKE2b-256 8fc6b34f3f1ed0910ad1359c6be4584fc3bdf6bcb0519aa48283c9a00e0d42e5

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