Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/syrusakbary/pyjade
Jade template system for Django, Jinja2 and Mako
https://github.com/syrusakbary/pyjade
Last synced: 29 days ago
JSON representation
Jade template system for Django, Jinja2 and Mako
- Host: GitHub
- URL: https://github.com/syrusakbary/pyjade
- Owner: syrusakbary
- License: mit
- Created: 2011-11-29T18:58:16.000Z (almost 13 years ago)
- Default Branch: master
- Last Pushed: 2023-05-17T07:29:53.000Z (over 1 year ago)
- Last Synced: 2024-10-03T17:35:29.677Z (about 1 month ago)
- Language: Python
- Homepage:
- Size: 421 KB
- Stars: 698
- Watchers: 23
- Forks: 124
- Open Issues: 102
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-starred - syrusakbary/pyjade - Jade template system for Django, Jinja2 and Mako (others)
README
# PyJade [![Build Status](https://travis-ci.org/syrusakbary/pyjade.svg)](https://travis-ci.org/syrusakbary/pyjade)
[![Join the chat at https://gitter.im/syrusakbary/pyjade](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/syrusakbary/pyjade?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
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:```console
pyjade [-c django|jinja|mako|tornado] input.jade [output.html]
```or, alternatively:
```console
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:
```console
pip install pyjade
```Or:
```console
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:
```python
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:
```python
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:
```python
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:
```python
jinja_env = Environment(extensions=['pyjade.ext.jinja.PyJadeExtension'])
```Mako
----Just add `pyjade.ext.mako.preprocessor` as preprocessor:
```python
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::
```python
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:
```python
config.include('pyjade.ext.pyramid')
```Tornado Templates
-----------------Append this after importing tornado.template
```python
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.mdExample
-------This code:
```jade
!!! 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:
```html
{{pageTitle}}
if (foo) {
bar()
}
Jade - node template engine
{%if youAreUsingJade%}
You are amazing
{%else%}
Get on it!
{%endif%}
```
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")````python
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:
```jade
- load crispy_forms_tags
- crispy form
```This will compile into
```html
{% 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:```jade
| {% 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```console
./test.sh
```TODOs and BUGS
==============
See: http://github.com/syrusakbary/pyjade/issues