• 在webpy中使用Mako模板引擎
    • 问题
    • 解决方案
    • 模板文件
    • 注意:
    • 参考:

    在webpy中使用Mako模板引擎

    问题

    如何在webpy中使用Mako模板引擎?

    解决方案

    首先需要安装Mako和web.py(0.3):http://www.makotemplates.org/ 然后尝试下面的代码:

    1. # encoding: utf-8
    2. # File: code.py
    3. import web
    4. from web.contrib.template import render_mako
    5. urls = (
    6. '/(.*)', 'hello'
    7. )
    8. app = web.application(urls, globals(), autoreload=True)
    9. # input_encoding and output_encoding is important for unicode
    10. # template file. Reference:
    11. # http://www.makotemplates.org/docs/documentation.html#unicode
    12. render = render_mako(
    13. directories=['templates'],
    14. input_encoding='utf-8',
    15. output_encoding='utf-8',
    16. )
    17.  
    18. class hello:
    19. def GET(self, name):
    20. return render.hello(name=name)
    21. # Another way:
    22. #return render.hello(**locals())
    23.  
    24. if __name__ == "__main__":
    25. app.run()

    模板文件

    1. ## File: templates/hello.html
    2.  
    3. Hello, ${name}.

    注意:

    如果你使用Apache+mod_wsgi来部署webpy程序, 你也许会在Apache错误日志中得到下面的错误信息:[Sat Jun 21 21:56:22 2008] [error] [client 192.168.122.1] TopLevelLookupException: Cant locate template for uri ‘index.html’

    你必须使用绝对路径指出模板的位置.你也可以使用相对路径来让它更简单一些:

    1. import os
    2.  
    3. render = render_mako(
    4. directories=[os.path.join(os.path.dirname(__file__), 'templates').replace('\\','/'),],
    5. input_encoding='utf-8',
    6. output_encoding='utf-8',
    7. )

    参考:

    http://code.google.com/p/modwsgi/wiki/ApplicationIssues