python模板引擎。
backslant的Python项目详细描述
backplant是一个模板引擎,它的构建方式与以前完全不同。
您可以将迭代器或生成器作为输入馈送,并获得迭代输出。
第三-它通过导入工作。如果你想得到模板,只需导入并使用它。如果您想要包含
其他模板-导入它。如果你想在某个目录模板,导入它!就像“来自”。导入其他模板``.
使用绝对导入或相对导入。
backslant.backslantfinder())
如果要将呈现的HTML发送到浏览器:
h1“header”header“
您可以定义一个函数:
-def render_form(method):
form(method=method)
input(type=“text”value=“123”)
end call it:
h1
==render_form('post')
是的,这很简单,您只需使用python构造。这里的`=`是`-yield from`.
,`=`是`-yield`.
的快捷方式,现在可以用函数来继承模板。
base.bs:
!doctype/html
html
head
title“页面标题”
body
h1{'class':''.join(['main','content'],“ng app”:“application”}
页眉
div.content
==options['content_block'](
div.footer
backslant 2015
index.bs:
-from。import base
-def content():
-for i in range(10):
p
='paragraph{}'。format(i)
==base.render(content\u block=content)
但是我们有语法糖:
:call base.render(*options)
:content_block
-对于范围(10)内的i:
p
=paragraph{}。format(i)
:footer_block
p“index page”
参数
----
您可以使用arg=`parentised python expression or variable name`或
`tag.class{'a':5,'b':''.join(options.classes)}`表单。
render或not render?
---------
编译模板时,我们需要它以某种方式放置在模块中。如果您在顶层有任何标记或调用,
,那么我们肯定必须将它们放入函数中。我们为此创建“render”函数。
然后导入模板并调用此“render”。
然后backlant不会在“render”函数中隐式覆盖
,这是定义模板libs的方法。你甚至可以在PyPI上分发它。
BR/> BR/>烧瓶
-
BR/>如果你想把反斜率整合到现有的项目中,重写所有模板是很痛苦的。因此
我们有解决方法:
从backplant.flask导入extend_jinja2,包括_jinja2
:
-来自Backlant.Flask Import Extend_Jinja2,include_jinja2
:调用extend_jinja2('layouts/base.html')
-def content(ctx):
==include_jinja2('layouts/header.html')
div.container
div.page-header
h1
=选项[“公司]。别名
你可以将性能与Jinja2进行比较。
几乎相等。
您可以将迭代器或生成器作为输入馈送,并获得迭代输出。
第三-它通过导入工作。如果你想得到模板,只需导入并使用它。如果您想要包含
其他模板-导入它。如果你想在某个目录模板,导入它!就像“来自”。导入其他模板``.
使用绝对导入或相对导入。
backslant.backslantfinder())
如果要将呈现的HTML发送到浏览器:
h1“header”header“
您可以定义一个函数:
-def render_form(method):
form(method=method)
input(type=“text”value=“123”)
end call it:
h1
==render_form('post')
是的,这很简单,您只需使用python构造。这里的`=`是`-yield from`.
,`=`是`-yield`.
的快捷方式,现在可以用函数来继承模板。
base.bs:
!doctype/html
html
head
title“页面标题”
body
h1{'class':''.join(['main','content'],“ng app”:“application”}
页眉
div.content
==options['content_block'](
div.footer
backslant 2015
index.bs:
-from。import base
-def content():
-for i in range(10):
p
='paragraph{}'。format(i)
==base.render(content\u block=content)
但是我们有语法糖:
:call base.render(*options)
:content_block
-对于范围(10)内的i:
p
=paragraph{}。format(i)
:footer_block
p“index page”
参数
----
您可以使用arg=`parentised python expression or variable name`或
`tag.class{'a':5,'b':''.join(options.classes)}`表单。
render或not render?
---------
编译模板时,我们需要它以某种方式放置在模块中。如果您在顶层有任何标记或调用,
,那么我们肯定必须将它们放入函数中。我们为此创建“render”函数。
然后导入模板并调用此“render”。
然后backlant不会在“render”函数中隐式覆盖
,这是定义模板libs的方法。你甚至可以在PyPI上分发它。
BR/> BR/>烧瓶
-
BR/>如果你想把反斜率整合到现有的项目中,重写所有模板是很痛苦的。因此
我们有解决方法:
从backplant.flask导入extend_jinja2,包括_jinja2
:
-来自Backlant.Flask Import Extend_Jinja2,include_jinja2
:调用extend_jinja2('layouts/base.html')
-def content(ctx):
==include_jinja2('layouts/header.html')
div.container
div.page-header
h1
=选项[“公司]。别名
你可以将性能与Jinja2进行比较。
几乎相等。