V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
Livid
V2EX  ›  Python

关于最好的模板语言

  •  
  •   Livid · 2010-07-20 03:47:51 +08:00 · 21655 次点击
    这是一个创建于 5272 天前的主题,其中的信息可能已经有所发展或是发生改变。
    目前用过 Django 和 Tornado 的,总是感觉在一些小细节上不太满意。

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

    比如HAML,本来她能帮你集成类Html页面的,好了,这次只能你自己动手玩。
    leondu
        12
    leondu  
       2010-09-02 19:01:14 +08:00
    @minghua

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

    可恨的是作者就是没有给出最后的模板...
    TerranC
        17
    TerranC  
       2010-12-26 00:49:42 +08:00
    jinja2 不错,很方便。
    gonghao
        18
    gonghao  
       2010-12-26 01:49:02 +08:00   ❤️ 1
    @ZoomQuiet 不晓得最后提到的是不是这个~
    http://ejohn.org/blog/javascript-micro-templating/

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

    js templates 给我带来了良好的实践体验,后端只需要准备好数据,模版什么的,ajax 什么的统统让 js 搞定啦,再也不用写两套渲染方法了~
    dreampuf
        28
    dreampuf  
       2011-03-24 13:18:33 +08:00
    tenjin1.0.1

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

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

    PS:我知道 @ZoomQuiet 是CPyUg的大妈啊。偶当年还是想进去CpyUG来着,RP不够啊,一直被拒绝,现在。。。唉,算了,懒得进去瞎掺和了,还是洗洗睡吧,。。。哪里都可以学习啊。。。不过还是很感谢 ZoomQuiet的付出,非常非常感谢。
    ZoomQuiet
        38
    ZoomQuiet  
       2011-04-28 14:42:22 +08:00
    @mywaiting 嗯嗯嗯,开始偏题了,不过, PS: 当初没有进来,不是RP 问题,只是耐心问题而已, 订阅的规则一直有说 http://code.google.com/p/cpyug/wiki/PythonCn#%E8%AE%A2%E9%98%85%E9%97%AE%E9%A2%98 但是,没有耐心看一眼的话,以后不论学习什么,也是难以深入的哈,这是个基本可用的小测试 ;-)
    iiduce
        39
    iiduce  
       2011-04-28 15:27:48 +08:00
    新的django项目中用了jinja2,速度还没有看出来,语法和django模板真的很想,但是语法要多了不少,灵活一些。 但是jinja2和django的集成导致django的不少组件没法直接用了。
    yuest
        40
    yuest  
       2011-04-28 16:07:48 +08:00
    最近做的东西用 tornado 原生 + mustache 片段,前后端共用。
    remus
        41
    remus  
       2011-06-07 22:34:30 +08:00
    zhangkaixuan
        42
    zhangkaixuan  
       2011-06-21 01:20:16 +08:00
    正在往php+drupal攀爬
    island205
        43
    island205  
       2011-08-09 12:40:57 +08:00
    mustache
    lenmore
        44
    lenmore  
       2011-08-09 14:59:40 +08:00
    jinja2 +1
    wong2
        45
    wong2  
       2011-11-10 17:20:44 +08:00
    iwege
        46
    iwege  
       2011-11-10 18:54:22 +08:00
    underscore 自带的template ,js的,很灵活很小巧,很适合前端...
    iwege
        47
    iwege  
       2011-11-10 18:56:58 +08:00
    // 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~
    lijia18
        48
    lijia18  
       2011-11-10 19:11:21 +08:00
    jinja2 +1
    jckwei
        49
    jckwei  
       2011-11-13 16:17:55 +08:00
    我是来投 tenjin 的
    clino
        50
    clino  
       2011-11-15 17:22:40 +08:00
    我也推荐 uliweb ,是能在 html 里面内嵌 python 代码的
    lerry
        51
    lerry  
       2012-02-14 13:30:12 +08:00
    jinja2
    shawiz
        52
    shawiz  
       2012-02-14 14:16:36 +08:00
    @yuest 怎样的前后端共用?是不是 js + python?
    yuest
        53
    yuest  
       2012-02-15 16:27:10 +08:00
    @shawiz 恩,当时就用两个版本的 mustache。
    不过对于 js 来说,mustache 是个性能很差的模板引擎
    jo32
        54
    jo32  
       2012-02-15 19:38:38 +08:00 via Android
    选择真多,我觉得选社区资源多的就好了。。。
    cloudream
        55
    cloudream  
       2012-02-15 20:41:48 +08:00
    @chuangbo jQuery template plugin是这么回事儿:

    微软VS团队引入jQuery时写了这个东西(当时jQuery项目一个新闻是MS和NOKIA开发工具原生支持jQuery)。

    现在发布的jQuery template plugin是:John Resig看了一遍微软写的,当着微软员工的面,cmd+A,delete,然后现场重写了一遍⋯⋯
    onlytiancai
        56
    onlytiancai  
       2012-02-15 20:52:08 +08:00 via Android
    哈哈,楼上说的是真事吗
    whtsky
        57
    whtsky  
       2012-02-15 21:16:27 +08:00 via Android
    tenjin+1…
    kojp
        58
    kojp  
       2012-02-15 23:00:00 +08:00
    看完所有回复 ,好迷茫 ..
    不是以前一直听 livid说 tornado很不错的吗 ?
    我还是先把 django学好再说吧 ..
    shawiz
        59
    shawiz  
       2012-02-16 03:24:25 +08:00
    andy
        60
    andy  
       2012-02-16 09:17:34 +08:00
    @cloudream 这太伤人了,M$员工都有强烈的优越感。
    felinx
        61
    felinx  
       2012-02-16 10:04:27 +08:00
    @mywaiting Tornado模板的UIModule有点绕,不如mako的方便。mako和jinja2一个级别,差别主要在个人喜好,mako的语法根常见的模板语言不太一样。
    jckwei
        62
    jckwei  
       2012-02-16 10:08:01 +08:00
    个人喜好+习惯
    wptree
        63
    wptree  
       2012-02-16 10:26:11 +08:00
    前端的话,jtemplate还不错的
    superisaac
        64
    superisaac  
       2012-02-16 11:05:44 +08:00
    前端的话,Mustache不错
    jakepg
        65
    jakepg  
       2012-02-16 11:23:24 +08:00
    @wptree jtemplate 怎么不转义输出啊?
    yuest
        66
    yuest  
       2012-02-16 12:07:40 +08:00
    @shawiz 没用过,这里有一个性能比较 http://jsperf.com/hogan-performance/2
    这里有好多模板引擎的比较 http://jsperf.com/dom-vs-innerhtml-based-templating/346
    mywaiting
        67
    mywaiting  
       2012-02-16 12:26:20 +08:00
    @felinx 绕,有一点吧,不过能把模板里面通用的抽出来,UIModule的实现也是很不错的.....

    忽然想到我上次把UIModule里面的render方法写成self.render(""),结果Python提示我堆栈超出最大限制了.....自己把自己调用了.....囧.....
    88250
        68
    88250  
       2012-02-16 12:37:43 +08:00
    FreeMarker,总感觉功能过于累赘。
    有时候还是简单的模版引擎比较好,比如没有逻辑表达式,没有复杂类型。
    felinx
        69
    felinx  
       2012-02-16 12:38:37 +08:00
    @mywaiting 你去看看mako的 http://docs.makotemplates.org/en/latest/defs.html# 就会知道为什么我会说UIModule有点绕
    mywaiting
        70
    mywaiting  
       2012-02-16 12:50:46 +08:00
    @felinx 看得有点晕....
    cloudream
        71
    cloudream  
       2012-03-04 20:26:11 +08:00
    微软澳洲11年remix上speaker自己说的 XD
    yxlwfds
        72
    yxlwfds  
       2013-03-02 13:17:08 +08:00
    Tenjin +1
    darkread
        73
    darkread  
       2014-02-05 21:22:18 +08:00
    @zhangkaixuan

    刚刚从php+drupal坑里面爬出来。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5724 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 03:03 · PVG 11:03 · LAX 19:03 · JFK 22:03
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.