Skip to main content

PyPugJS PyPiPackage BuildStatus Coverage

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

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 cannot support anything other since I’m not actively using it nor 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

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.

Framework specific installation instructions

Syntax

Generally the same as the PugJS Node 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>

Convert existing templates online with the HTML2Jade converter.

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})

Define mixins like this mixins/foo.pug:

mixin foo(data)
  .foo {{ data }}

And use them in your templates like this:

include mixins/foo.pug

div
  +foo(data)

Mixins might not work, depending on the used Framework. The following have been reported as broken:

  • Django (v4.2)

TESTING

To start the testsuite, start the following commands:

make init
make test

TODOs and BUGS

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

ChangeLog

History

*

  • django docs: mention not to wrap with django’s caching template loader

  • updated history

5.8.1

  • mentioning the flask example in the installation section of the docs

  • prevent endless recursion in Django template overriding

5.8.0

  • more details/docs for using pypugjs with jinja2

  • fixed issue with Jinja Choiceloaders

5.7.2

  • Fix specifying attributes without commas.

5.7.1

  • code has been blacked

5.7.0

  • included encoding detection for template files

5.6.1

  • fixed documentation for the new translation call

  • fixed typos in code

  • added min Django version to the docs

  • new release script

5.6.0

  • added enable_pug_translations call

5.5.1

  • fixed wrong exception handling for visitExtends

5.5.0

  • better caching for django template loader

  • loader has been made compatible with django 1.11

5.4.0

  • added mixing to flask hello world

  • Clean pipe inserts whitespace This allows for use of a single pipe character on a line to insert a whitespace before or after a tag.

5.3.0

  • fixed build script adding back all internal packages

5.2.0

  • fixed recursive import problem

5.1.5

  • addeded flake8 testing

  • sorting out old Django version 1.11 and 2.0 are left for travis testing

5.1.4

  • better release script

5.1.3

  • cleanup / documentation

  • extended makefile

5.1.2

  • added Makefile for testing, installing, releasing, linting …

  • added coverage reports

  • package is mainly base on the cookiecutter package

  • additional release helpers

  • packages passes flake8 test

5.1.1

  • conditional classes feature (thx to paradoxxxzero)

  • mixin support for jinja (matin)

  • mixin support for django

  • refactored the django tests to actually use the file loader

  • some pep8 fixes

Authors

  • PyPugs was originally created as PyJade by Syrus Akbary in November 2011.

  • It was then renamed maintained by Matan Noam Shavit

  • Since I need it for my projects and hate coding plain HTML, I continued maintaining this package.

Metadata

Release files for pypugjs 7.0.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for pypugjs 7.0.0
File Size Uploaded Provenance
pypugjs-7.0.0.tar.gz 35.8 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for pypugjs 7.0.0
File Interpreter ABI Platform
pypugjs-7.0.0-py2.py3-none-any.whl Python 2, Python 3 none any Details

Total release size: 73.8 kB

Release files / pypugjs-7.0.0.tar.gz

Download URL pypugjs-7.0.0.tar.gz
Size 35.8 kB
Tags Source
SHA-256 checksum
How to use checksums
95bb872afe09a0fa367b589e43b623924e4dd8201a6d61562c0b21614a8a4e67
BLAKE2b-256 checksum
How to use checksums
554a6c1dd8955f3676f2350323b265c2a4ee8f438bb76be59b3b5c2f0464912f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.3

Release files / pypugjs-7.0.0-py2.py3-none-any.whl

Download URL pypugjs-7.0.0-py2.py3-none-any.whl
Size 38.0 kB
Tags Python 2 Python 3
SHA-256 checksum
How to use checksums
dbd5dffcb38a8962da019f1721c1a1cb99711e786907307e11d51fb993cff5b6
BLAKE2b-256 checksum
How to use checksums
6f35a52f4f85b09a110be957bf0475f78c74427409ebf6de58caaff5d3292ad7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.3

Security for pypugjs 7.0.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

Release history Release notifications | RSS feed

This release

7.0.0 This release

2 release files No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page