Jade语法模板适配器,用于Django、Jinja2、Mako和Tornado模板
项目描述
PyJade是Jade-lang的高性能Python端口,可以将任何.jade源代码转换为每种模板语言(Django、Jinja2、Mako或Tornado)。
工具
简单地将转换输出到您的控制台
pyjade [-c django|jinja|mako|tornado] input.jade [output.html]
安装
首先,您必须做
pip install pyjade
或者
python setup.py install
现在只需 使用`.jade`扩展名命名您的模板,这个Jade编译器就会完成剩余的工作。任何其他扩展名的模板都不会被pyjade编译器编译。
Django
在settings.py
中,向TEMPLATES
添加一个loader
,如下所示
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'], # Remove this line for Django 1.8
},
},
]
Jinja2
只需将pyjade.ext.jinja.PyJadeExtension
作为扩展添加
jinja_env = Environment(extensions=['pyjade.ext.jinja.PyJadeExtension'])
Mako
只需将pyjade.ext.mako.preprocessor
作为预处理器添加
from pyjade.ext.mako import preprocessor as mako_preprocessor
mako.template.Template(haml_source,
preprocessor=mako_preprocessor
)
Flask
只需将pyjade.ext.jinja.PyJadeExtension
作为扩展添加到应用的环境中
app.jinja_env.add_extension('pyjade.ext.jinja.PyJadeExtension')
Pyramid
调整您的“your_project/__init__.py”并在主函数中添加以下行
config.include('pyjade.ext.pyramid')
Tornado模板
在导入tornado.template之后添加此内容
from tornado import template
from pyjade.ext.tornado import patch_tornado
patch_tornado()
(...)
语法
与Jade Node.js模块完全相同(除了未实现的情况) https://github.com/visionmedia/jade/blob/master/README.md
示例
此代码
!!! 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!
转换为
<!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>
注册过滤器
如果您想将一个函数注册为过滤器,只需使用pyjade.register_filter("filter_name")
装饰该函数即可
import pyjade
@pyjade.register_filter('capitalize')
def capitalize(text,ast):
return text.capitalize()
测试
您必须安装nose包。您可以使用以下命令进行测试
./test.sh