PyPugJS |PyPiPackage| |BuildStatus| |Coverage|
.. |PyPiPackage| image:: https://badge.fury.io/py/pypugjs.svg
:target: https://badge.fury.io/py/pypugjs
.. |BuildStatus| image:: https://github.com/kakulukia/pypugjs/actions/workflows/tests.yml/badge.svg
:target: https://github.com/kakulukia/pypugjs/actions/workflows/tests.yml
.. |Coverage| image:: https://codecov.io/gh/kakulukia/pypugjs/branch/master/graph/badge.svg
:target: https://codecov.io/gh/kakulukia/pypugjs
PyPugJS is a fork of PyJade <http://github.com/syrusakbary/pyjade>
_
with the name Jade changed to PugJS <https://github.com/pugjs/pug>
_.
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 <docs/installation.rst>
_
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
.. code:: pug
!!! 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
.. code:: html
<!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 <http://www.html2jade.org/>
_.
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")
.. code:: python
import pypugjs
@pypugjs.register_filter('capitalize')
def capitalize(text, ast):
return text.capitalize()
Notable Features
Adding conditional classes:
.. code:: pug
a(class={'active-class': True, 'another': False})
Define mixins like this mixins/foo.pug:
.. code:: pug
mixin foo(data)
.foo {{ data }}
And use them in your templates like this:
.. code:: pug
include mixins/foo.pug
div
+foo(data)
Mixins might not work, depending on the used Framework.
The following have been reported as broken:
TESTING
To start the testsuite, start the following commands::
make init
make test
TODOs and BUGS
See: https://github.com/kakulukia/pypugjs/issues
ChangeLog <docs/HISTORY.rst>
_
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
+++++++
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
+++++++
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.