• Stars
    star
    696
  • Rank 65,018 (Top 2 %)
  • Language
    Python
  • License
    MIT License
  • Created almost 13 years ago
  • Updated over 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Jade template system for Django, Jinja2 and Mako

PyJade Build Status

Join the chat at https://gitter.im/syrusakbary/pyjade

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

UTILITIES

To simply output the conversion to your console:

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

or, alternatively:

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

To convert directly inside a python script:

import pyjade
jade_text = '''!!! 5
html
head
    body foo bar!
'''
print pyjade.simple_convert(jade_text)

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

For Django 1.9

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

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
        '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',
                'django.core.context_processors.request'
            ],
            'loaders': [
                # PyJade part:   ##############################
                ('pyjade.ext.django.Loader', (
                    'django.template.loaders.filesystem.Loader',
                    'django.template.loaders.app_directories.Loader',
                ))
            ],
            'builtins': ['pyjade.ext.django.templatetags'],
        },
    },
]

For Django 1.8

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

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
        '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',
                'django.core.context_processors.request'
            ],
            'loaders': [
                # PyJade part:   ##############################
                ('pyjade.ext.django.Loader', (
                    'django.template.loaders.filesystem.Loader',
                    'django.template.loaders.app_directories.Loader',
                ))
            ],
        },
    },
]

Or, in Django 1.7 or earlier:

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(jade_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

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>

Register filters

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

import pyjade

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

Using templatetags (and any feature of the compiled-to language)

Using Django and crispy-forms as an illustrative example but the information can be generalized.

If you need to use templatetags, you can use Jade's syntax for rendering code:

- load crispy_forms_tags
- crispy form

This will compile into

{% load crispy_forms_tags %}
{% crispy form %}

If you have any trouble with this feature, or there's some feature of your template language that is being misinterpreted when using this syntax, you can also do something like this:

| {% load crispy_forms_tags %}
| {% crispy form %}

This will compile into the same Django template snippet.

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

More Repositories

1

gdom

DOM Traversing and Scraping using GraphQL
Python
1,240
star
2

Flask-SuperAdmin

The best admin interface framework for Flask. With scaffolding for MongoEngine, Django and SQLAlchemy.
Python
635
star
3

validate_email

Validate_email verify if an email address is valid and really exists
Python
544
star
4

snapshottest

Snapshot Testing utils for Python ๐Ÿ“ธ
Python
529
star
5

react-native-refresher

A pull to refresh ListView for React Native completely written in js.
JavaScript
453
star
6

promise

Ultra-performant Promise implementation in Python
Python
352
star
7

aiodataloader

Asyncio DataLoader for Python3
Python
270
star
8

interpy

Ruby like string interpolation #{} in Python
Python
254
star
9

fastdiff

A fast native implementation of diff algorithm with a pure Python fallback
Python
37
star
10

jsjinja

Jinja2 to Javascript template converter. Now you can render your Jinja2 templates on the client side! ;)
Python
33
star
11

Djinja

(Deprecated) A package that makes possible the integration of Jinja2 in Django, in a clean way.
Python
20
star
12

Webclient-Kohana

Kohana Utilities
PHP
8
star
13

syrusakbary.com

My personal webpage
CSS
6
star
14

django-processorfield

A powerful filefield for Django with multiple processor outputs
Python
5
star
15

PlagiarismDetector-PHP

A Plagiarism Detector system made in PHP
PHP
4
star
16

graphqlprimer

Graphene Twitter Streams Demo for the presentation at Primer.ai
Python
3
star
17

eXercita

Python
3
star
18

flask-beaker

Beaker session interface for Flask.
Python
3
star
19

wasmer-vs-docker

Wasmer vs Docker
Makefile
3
star
20

netlify-wasmer

Netlify wasmer example
2
star
21

Animotion-Java

An animation framework for java. Supports transitions and much more!
2
star
22

assetsy

A vitaminated way to minify, combine and optimize your web resources
Python
1
star
23

gulp-jade-mixins

Jade mixins js-generator plugin for Gulp
JavaScript
1
star
24

PlagiarismDetector_Block-Moodle

The PlagiarismDetector Block for Moodle
1
star
25

RobotExploration-Java

A Robot Interface
Java
1
star
26

wasi-tests

Shell
1
star
27

wasmer_rust_playground

Playground for the Wasmer Rust Integration
Rust
1
star
28

django-vagrant-base

Automatically deploy Django site locally with Vagrant
Ruby
1
star
29

PlagiarismDetector_Mod-Moodle

The PlagiarismDetector platform for Moodle
PHP
1
star
30

FuzzyUppaal-Java

An implementation of the Uppaal modeling system for the support of fuzzy logic.
Java
1
star
31

tuentify

Te avisa al instante de tus notificaciones pendientes en Tuenti y agiliza la carga de la pรกgina.
JavaScript
1
star