python中的pug模板支持

ninjadog的Python项目详细描述


https://img.shields.io/pypi/v/ninjadog.svghttps://img.shields.io/travis/knowsuchagency/ninjadog.svgUpdates

Pug在python中支持模板(以前是jade

安装

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语法呈现模板需要经过以下过程:

  1. 通过jinja2在初始模板上呈现元素
  2. 将输出传递给pug-cli,收集进程中的扩展和包含内容
  3. 再次通过jinja2呈现输出,因为原始模板可能已经扩展或包含了其他具有jinja2语法的模板。

这意味着,如果要转义jinja2语法,需要执行两次。

例如,要呈现文本{{ escaping inception }}, 模板中需要有{{ "{{ '{{ escaping inception }}' }}" }}

不起

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
JavaEJB3.0托管bean注入和db连接关闭   amazon web服务用Java连接AWS aerospike实例   java如何使用Springsecurity以编程方式登录用户?   Spring批处理代理失败。lang.ClassCastException:com。太阳代理$Proxy20无法强制转换为   java并发中的条件语句与信号量   java如何使用springdatajpa mongoRepository进行查询和更新?   java将代码从bufferedreader转换为scanner   java SonarQube问题:重命名此常量名称以匹配正则表达式“^[AZ][AZ09]([AZ09]+)$”   带有包含嵌套对象的json主体的java POST请求   java类akka。男演员TypedActor$MethodCall无法访问修饰符为“public abstract”的类JobManager的成员   Android Studio Assistant中的java Firebase,异常错误   javagwt。GWT开发模式控制台中未显示日志   java JAXWS wsimport正在停止重新编译   java以编程方式分析jar文件