V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请 登入
V2EX  ›  Python

关于最好的模板语言

By Livid at 1 year, 6 months ago, 6485 hits
目前用过 Django 和 Tornado 的,总是感觉在一些小细节上不太满意。

大家有更好的推荐么?
50 回复  |  直到 2011-11-15 17:22:40 PM
#1 - 1 year, 6 months ago   回复 daqing
daqing
我比较喜欢HAML,不知有没有python语言的实现。
#2 - 1 year, 6 months ago   回复 kuber
kuber
我现在在用Ninja2, 还不错, 比Django 模板限制少
#3 - 1 year, 6 months ago   回复 shawiz
shawiz
我觉得jinja2好!比 mako 简洁,比 genshi 快多了。
#4 - 1 year, 6 months ago   回复 flytwokites
flytwokites
自已写一个,不会超过500行,哪里不满意就自已改。
#5 - 1 year, 6 months ago   回复 iwinux
iwinux
Uliweb 这个框架带有一个模板 http://code.google.com/p/uliweb/source/browse/trunk/uliweb/core/template.py,是 web2py 里的模板的改进版,优点是在模板里可以直接写Python代码,缺点是可能会有性能问题……
#6 - 1 year, 5 months ago   回复 yuest
yuest
@daqing 有 SHPAML,不是模板,仅仅是一个预处理器,但是真的很好很强大。
#7 - 1 year, 5 months ago   回复 huacnlee
huacnlee
@daqing 我还是喜欢 Rails 的 erb
#8 - 1 year, 5 months ago   回复 darcy
darcy
只用过django 和velocity ,感觉还是 django 好些。
个人觉得没有所谓的最好,只是对你工作的度来说是否合适。a的缺点往往就是b的优点,而又没有谁那么容易的能够兼顾全面。
#9 - 1 year, 5 months ago   回复 flytwokites
flytwokites
模板里可以直接用python是必须的。django那种模板用着真是痛苦,写tag也很不方便。
#10 - 1 year, 5 months ago   回复 est
est
@shawiz 同推荐jinja2。@kuber 说的ninja2其实指的就是jinja2吧?
#11 - 1 year, 5 months ago   回复 minghua
minghua
过渡简洁的模版会让设计师MM晕掉的,好不容易学会个Html,容易吗我?

比如HAML,本来她能帮你集成类Html页面的,好了,这次只能你自己动手玩。
#12 - 1 year, 5 months ago   回复 leondu
leondu
@minghua

确实,haml对设计师的要求高一些,基本上要定位为前端开发,而不是简单的美工了。
不过如果你团队中有这么一位靠谱的前端的话,那么使用者就非常的舒服了。
#13 - 1 year, 5 months ago   回复 minghua
minghua
@leondu 所言极是。
#14 - 1 year, 5 months ago   回复 iugo
iugo
#15 - 1 year, 5 months ago   回复 vicalloy
vicalloy
Django的模板通常情况下是好用的,tag和filter在大多情况下也还比较容易写。
但由于限制比较多,某些情况下还是很让人抓狂。
Jinja2长得和Django的模板比较像,而且限制少些,性能也不错。
值得一试
#16 - 1 year, 4 months ago   回复 ZoomQuiet
ZoomQuiet
认同这种追寻:
寻找更好的模板系统记 - Kenneth's Blog - 歪酷博客 Ycool Blog
http://kenneth.ycool.com/post.2812445.html

可恨的是作者就是没有给出最后的模板...
#17 - 1 year, 1 month ago   回复 TerranC
TerranC
jinja2 不错,很方便。
#18 - 1 year, 1 month ago   回复 gonghao
gonghao
@ZoomQuiet 不晓得最后提到的是不是这个~
http://ejohn.org/blog/javascript-micro-templating/

两篇文章的发布日期真是出奇的一致啊~
#19 - 1 year, 1 month ago   回复 Livid
Livid
最后为新项目选定了 Jinja2,感谢大家的推荐。
#20 - 1 year, 1 month ago   回复 muxi
muxi
慢了一步,本来推荐Jinja2的
#21 - 1 year, 1 month ago   回复 goophy
goophy
我是来看结果的:)
#22 - 1 year, 1 month ago   回复 fanzeyi
fanzeyi
nice~
我正好在写一个需要模板系统的工程
#23 - 1 year, 1 month ago   回复 iwinux
iwinux
我直接转向RoR了 = =...
#24 - 1 year, 1 month ago   回复 Los
Los
@iwinux ^_^你做了个正确的选择
#25 - 1 year, 1 month ago   回复 Jet
Jet
jinja2 + 1 , 真的很棒而且性能不错。
#26 - 10 months, 2 weeks ago   回复 ZoomQuiet
ZoomQuiet
@gonghao 的确是这个哪 jQuery 创始人的小作品!
#27 - 10 months, 2 weeks ago   回复 chuangbo
chuangbo
@ZoomQuiet 这个08年的小作品具有强大的潜在威力,也许一直让 John Resig 耿耿于怀,导致 jQuery templates plugin 被收进 jQuery 官方。
不过目前还是 beta ,最终应该会并入 jQuery。
http://api.jquery.com/category/plugins/templates/

js templates 给我带来了良好的实践体验,后端只需要准备好数据,模版什么的,ajax 什么的统统让 js 搞定啦,再也不用写两套渲染方法了~
#28 - 10 months, 2 weeks ago   回复 dreampuf
dreampuf
tenjin1.0.1

此前使用jinjia挺强大的,一些模块化工作做的不错.但是多个文件的类库有些庞大.
后来换成tenjin,比jinjia灵活,不过模块化不如jinjia,每个模块必须为一个模板文件.此前版本的缩进问题很麻烦,不过1.0.1后可以无视这个问题了.

二者的文档碎片缓存都很强大.tenjin无论在速度还是在体积都优于jinjia不过他更像是封装了字符串拼接的python模块.而jinjia更传统,功能更丰富.
#29 - 10 months, 2 weeks ago   回复 mywaiting
mywaiting
@Livid 敢问Torando有哪些不满意的地方呢?能够说说吗?
#30 - 10 months, 2 weeks ago   回复 adow
adow
最近要想要一个js的模板,问题是不知道到底哪个比较好,后来一怒之下自己造了个轮子,200多行js,好像用着还行
#31 - 10 months, 1 week ago   回复 ZoomQuiet
ZoomQuiet
@adow 这么爽?! 开源卟?! 分享给大家体验哪,靠谱的话,推荐给 jQuery 流芳百世哪
#32 - 10 months, 1 week ago   回复 ZoomQuiet
ZoomQuiet
@mywaiting http://www.tornadoweb.org/ 被长城认证了!这就是最大的问题!
#33 - 10 months, 1 week ago   回复 ekayxu
ekayxu
推荐cheetah,性能非常好,并且看着舒服
#34 - 10 months, 1 week ago   回复 mywaiting
mywaiting
@ZoomQuiet 作为互联网从业人员,连翻:墙都不会的话,那基本可以忽略。
#35 - 10 months, 1 week ago   回复 chuangbo
chuangbo
@mywaiting 楼上的同学,@ZoomQuiet 是 CPyUG 的大妈呢⋯⋯
#36 - 10 months, 1 week ago   回复 stranbird
stranbird
Rails的erb真的很赞~
#37 - 10 months, 1 week ago   回复 mywaiting
mywaiting
@chuangbo 不管是不是大妈大叔,翻:墙的必备工作啊。这年头,不看英文真的什么都学不到啊。

PS:我知道 @ZoomQuiet 是CPyUg的大妈啊。偶当年还是想进去CpyUG来着,RP不够啊,一直被拒绝,现在。。。唉,算了,懒得进去瞎掺和了,还是洗洗睡吧,。。。哪里都可以学习啊。。。不过还是很感谢 ZoomQuiet的付出,非常非常感谢。
#38 - 9 months, 1 week ago   回复 ZoomQuiet
ZoomQuiet
@mywaiting 嗯嗯嗯,开始偏题了,不过, PS: 当初没有进来,不是RP 问题,只是耐心问题而已, 订阅的规则一直有说 http://code.google.com/p/cpyug/wiki/PythonCn#%E8%AE%A2%E9%98%85%E9%97%AE%E9%A2%98 但是,没有耐心看一眼的话,以后不论学习什么,也是难以深入的哈,这是个基本可用的小测试 ;-)
#39 - 9 months, 1 week ago   回复 iiduce
iiduce
新的django项目中用了jinja2,速度还没有看出来,语法和django模板真的很想,但是语法要多了不少,灵活一些。 但是jinja2和django的集成导致django的不少组件没法直接用了。
#40 - 9 months, 1 week ago   回复 yuest
yuest
最近做的东西用 tornado 原生 + mustache 片段,前后端共用。
#41 - 8 months ago   回复 remus
remus
#42 - 7 months, 2 weeks ago   回复 zhangkaixuan
zhangkaixuan
正在往php+drupal攀爬
#43 - 6 months ago   回复 island205
island205
mustache
#44 - 5 months, 4 weeks ago   回复 lenmore
lenmore
jinja2 +1
#45 - 2 months, 3 weeks ago   回复 wong2
wong2
#46 - 2 months, 3 weeks ago   回复 iwege
iwege
underscore 自带的template ,js的,很灵活很小巧,很适合前端...
#47 - 2 months, 3 weeks ago   回复 iwege
iwege
// By default, Underscore uses ERB-style template delimiters, change the
// following template settings to use alternative delimiters.
_.templateSettings = {
evaluate : /<%([\s\S]+?)%>/g,
interpolate : /<%=([\s\S]+?)%>/g,
escape : /<%-([\s\S]+?)%>/g
};

// JavaScript micro-templating, similar to John Resig's implementation.
// Underscore templating handles arbitrary delimiters, preserves whitespace,
// and correctly escapes quotes within interpolated code.
_.template = function(str, data) {
var c = _.templateSettings;
var tmpl = 'var __p=[],print=function(){__p.push.apply(__p,arguments);};' +
'with(obj||{}){__p.push(\'' +
str.replace(/\\/g, '\\\\')
.replace(/'/g, "\\'")
.replace(c.escape, function(match, code) {
return "',_.escape(" + code.replace(/\\'/g, "'") + "),'";
})
.replace(c.interpolate, function(match, code) {
return "'," + code.replace(/\\'/g, "'") + ",'";
})
.replace(c.evaluate || null, function(match, code) {
return "');" + code.replace(/\\'/g, "'")
.replace(/[\r\n\t]/g, ' ') + "__p.push('";
})
.replace(/\r/g, '\\r')
.replace(/\n/g, '\\n')
.replace(/\t/g, '\\t')
+ "');}return __p.join('');";
var func = new Function('obj', tmpl);
return data ? func(data) : func;
};
就这么点,完了~ hoho~
#48 - 2 months, 3 weeks ago   回复 lijia18
lijia18
jinja2 +1
#49 - 2 months, 3 weeks ago   回复 jckwei
jckwei
我是来投 tenjin 的
#50 - 2 months, 3 weeks ago   回复 clino
clino
我也推荐 uliweb ,是能在 html 里面内嵌 python 代码的
关于   |   FAQ   |   我们的愿景   |   广告投放   |   工作空间   |   Gadget Lab   |   博客   |   上网首页
创意工作者们的社区
Lovingly made by OLIVIDA
VERSION: 2.5.0-dev-6
♥ Do have a faith in what you're doing.