bottlepy template
bottle template usage
1 example
使用bottle模板,最简单的方法是使用template函数或view装饰器
1.1 template 函数
例子如下:
from bottle import template
template('filename', name="hello world") # filename 为文件名可以不包括后缀,默认后缀有:['tpl','html','thtml','stpl']
或
template('hello {{name}}', name="world") # 第一个参数也可以直接为字符串内容
# 或 定制其他参数
template('form.html', template_lookup=['./template/'], template_settings={'noescape':1}, data=json.dumps(data))
# 完整例子
from bottle import template, route
@route('/')
def index():
return template('index', name="world") # 返回 str(或python2 中的unicode)
### index.tpl
hello {{name}}
###
在bottle中可以使用的模板引擎有: MakoTemplate,CheetahTemplate,Jinja2Template,SimpleTemplate; 版本0.12.9中默认使用SimpleTemplate
可以在template中通过参数template_adapter来指定其他引擎, 也可以直接使用mako_template,cheetah_template,jinja2_template函数
默认查找路径 bottle.TEMPLATE_PATH 即 ['./', './views/'], 我们可以通过template_lookup参数来修改搜索路径
另外也可以通过参数template_settings来控制模板引擎渲染,比如在输出JSON数据时,不希望进行HTML ESCAPE, 则在SimpleTemplate中可以指定noescape为True
1.2 view 装饰器
# 和使用 template 一样
@view('hello_template')
def hello(name='World'):
return dict(name=name)
2.2 SimpleTemplate 引擎语法
变量和函数调用
% name = "Bob" # a line of python code
<p>Some plain text in between</p>
<%
# A block of python code
name = name.title().strip()
%>
<p>More plain text</p>
循环
<ul>
% for item in basket:
<li>{{item}}</li>
% end
</ul>
条件控制
<div>
% if True:
<span>content</span>
% end
</div>
默认模板语法使用语法符号为 <% %> % {{ }},为了不与angularjs或underscore等前端模板冲突, 我们可以修改模板语法 如 <{% %}> %% {%{ }%}
语法由空白字符分割,共5部分组成: block_start block_close line_start inline_start inline_end
template('filename', template_settings={'syntax': '<{% %}> %% {%{ }%}'})
参考官方文档
- template: templates function
- SimpleTemplate: simpletemplate syntax
- examples: template page example
bottlepy template的更多相关文章
- 为.NET Core项目定义Item Template
作为这个星球上最强大的IDE,Visual Studio不仅仅提供了很多原生的特性,更重要的是它是一个可定制的IDE,比如自定义Project Template和Item Template就是一个非常 ...
- jQuery.template.js 简单使用
之前看了一篇文章<我们为什么要尝试前后端分离>,深有同感,并有了下面的评论: 我最近也和前端同事在讨论这个问题,比如有时候前端写好页面给后端了,然后后端把这些页面拆分成很多的 views, ...
- 2000条你应知的WPF小姿势 基础篇<69-73 WPF Freeze机制和Template>
在正文开始之前需要介绍一个人:Sean Sexton. 来自明尼苏达双城的软件工程师.最为出色的是他维护了两个博客:2,000ThingsYou Should Know About C# 和 2,00 ...
- tornado template
若果使用Tornado进行web开发可能会用到模板功能,页面继承,嵌套... 多页应用模板的处理多半依赖后端(SPA就可以动态加载局部视图),就算是RESTfull的API设计,也不妨碍同时提供部分模 ...
- 设计模式(九): 从醋溜土豆丝和清炒苦瓜中来学习"模板方法模式"(Template Method Pattern)
今天是五.四青年节,祝大家节日快乐.看着今天这标题就有食欲,夏天到了,醋溜土豆丝和清炒苦瓜适合夏天吃,好吃不上火.这两道菜大部分人都应该吃过,特别是醋溜土豆丝,作为“鲁菜”的代表作之一更是为大众所熟知 ...
- C++泛型编程:template模板
泛型编程就是以独立于任何特定类型的方式编写代码,而模板是C++泛型编程的基础. 所谓template,是针对“一个或多个尚未明确的类型”所编写的函数或类. 使用template时,可以显示的或隐示的将 ...
- 新手入门Underscore.js 中文(template)
Underscore.js是一个很精干的库,压缩后只有4KB.它提供了几十种函数式编程的方法,弥补了标准库的不足,大大方便了javaScript的编程.MVC框架Backbone.js就将这个库作为自 ...
- knockoutjs如何动态加载外部的file作为component中的template数据源
玩过knockoutjs的都知道,有一个强大的功能叫做component,而这个component有个牛逼的地方就是拥有自己的viewmodel和template, 比如下面这样: ko.compon ...
- JavaScript模板引擎artTemplate.js——template.helper()方法
上一篇文章我们已经讲到了helper()方法,但是上面的例子只是一个参数的写法,如果是多个参数,写法就另有区别了. <div id="user_info"></d ...
随机推荐
- String、Stringbuffer、StringBuilder的区别(转载)
最近学习到StringBuffer,心中有好些疑问,搜索了一些关于String,StringBuffer,StringBuilder的东西,现在整理一下. 关于这三个类在字符串处理中的位置不言而喻,那 ...
- android 图片浏览器
自定义了gallary和ImageView: gallary: public class MyGallery extends Gallery { /** * GestureDetector类 在on ...
- Tomcat 在mac中Operation not permitted
5.执行/Library/Tomcat/bin下的startup.sh,然后打开http://localhost:8080查看是否Tomcat已经启动,若要停止服务器就运行同目录下的shutdown. ...
- hadoop作业缺少jar文件解决办法
1 可以使用maven把插件带入 2 把jar放到集群的jar文件目录下,然后重启集群
- R包之间冲突带来的奇怪错误
今天调试一个paper的代码,出现很奇怪的错误: qh2 <- mydf %>% filter(date >= as.Date('2013-08-14'),date <= as ...
- CSS布局奇技淫巧:各种居中
居中是我们使用css来布局时常遇到的情况.使用css来进行居中时,有时一个属性就能搞定,有时则需要一定的技巧才能兼容到所有浏览器,本文就居中的一些常用方法做个简单的介绍. 注:本文所讲方法除了特别说明 ...
- 关于位图读取函数int Load_Bitmap_File的lseek问题。
事情是这样的,本人在编译3D游戏编程大师技巧中的程序是遇到了一个关于位图读取函数int Load_Bitmap_File的lseek问题. 我使用以下位图读取函数读取位图事报错如下: int Load ...
- Baidu set to lose leading role in digital advertising _china daily
advertising: n,广告 Online search giant Baidu Inc is set to loset its top spot in the nation's booming ...
- Unity5 AssetBundle
设置assetBundleName AssetImporter importer = AssetImporter.GetAtPath(p); importer.assetBundleName = x; ...
- C#对象克隆介绍
浅拷贝和深拷贝 有两种对象克隆的方法:浅拷贝和深拷贝.浅拷贝只是复制引用,而不会复制引用的对象.深拷贝会复制引用的对象. 因此,原始对象中的引用和浅拷贝对象中的同一个引用都指向同一个对象.而深拷贝的对 ...