python中的pug模板支持
ninjadog的Python项目详细描述
- 自由软件:麻省理工学院许可证
- 文档:http://journalpanic.com/ninjadog
- github:https://github.com/knowsuchagency/ninjadog
安装
ninjadog需要python 3、node js、npm和pug-cli库
brew install npm npm install -g pug-cli pip install ninjadog
要与Pyramid一起使用,只需将其添加到配置中即可
config.include('ninjadog')
用法
Ninjadog利用用nodejs编写的pug-cli库来呈现 pugpython中的模板。
它允许您采取这样的措施
htmlheadtitle my pug template body#contenth1 Hello #{name}.blockinput#bar.foo1.foo2input(type="text",placeholder="your name") if name == "Bob" h2 Hello Bob ulfor book in books li=bookelseli sorry, no books
在上面撒些Python
fromninjadogimportrendercontext={'name':'Bob','books':['coloring book','audio book',"O'Reilly book"],'type':'text',}print(render(file=filepath,context=context,pretty=True))
要渲染此对象
<!DOCTYPE html><html><head><title>my pug template</title></head><body><divid="content"><h1>Hello Bob</h1><divclass="block"><inputclass="foo1 foo2"id="bar"><inputtype="text"placeholder="your name"><h2>Hello Bob</h2><ul><li>coloring book</li><li>audio book</li><li>O'Reilly book</li></ul></div></div></body></html>
您甚至可以将jinja2语法组合起来,以获得无与伦比的 模板渲染能力。
fromninjadogimportrenderdefstop_believing():returnFalsecontext={'stop_believing':stop_believing,'happy':{'birthday':'today',}}template_string=""" h1 hello, world if happy.birthday == 'today' p it's time to celebrate! p {{ "Don't" if not stop_believing() }} stop believing """print(render(template_string,context=context,pretty=True,with_jinja=True))
<h1>hello, world</h1><p>it's time to celebrate!</p><p>Don't stop believing</p>
为什么?
Pug模板是一种非常优雅的表达方式 HTML,国际海事组织。
存在一个项目,pyjade和一个较不流行的叉,pypugjs, 这是pug模板引擎的纯python实现, 但他们有一些小的错误和维护是有点缺乏。
我想最好有另一种方法来渲染 pug使用本机javascript呈现引擎的模板。
Ninjadog通过将pug cli作为子进程生成来实现这一点。 这意味着它不能像本机模板引擎那样快 类似于pyjade,但随着时间的推移,它可能更加可靠 它利用了流行且维护良好的nodejs实现。
有问题
目前,使用jinja2语法呈现模板需要经过以下过程:
这意味着,如果要转义jinja2语法,需要执行两次。
例如,要呈现文本{{ escaping inception }}, 模板中需要有{{ "{{ '{{ escaping inception }}' }}" }}。
不起