Tuesday, November 26, 2013

mako二三事 -- run_wsgi

mako源码的example目录里有一个run_wsgi.py文件,是一个简单的的wsgi程序,它的主要功能就是以templates或htdocs目录作为根目录,启动一个简单的wsgi服务,该服务读入GET或POST中的参数,以及PATH_INFO作为模板文件名,然后将GET/POST的参数均放入模板context中进行模板渲染,因此,该功能可以在没有程序支持的情况下单独调试模板。

不过该程序有两个小问题:
1. 32行的 return [template.render(**d)] 最好改成return [template.render_unicode(**d).encode(‘utf-8’)],然后以utf-8格式输出。有些场景下,不转码会报错。

2. 对于非html文件,它的是读取run_wsgi.py同级目录的,这在项目中一般不合适,因此
        u = re.sub(r'^\/+', '', uri)
        filename = os.path.join(root, u)
这里需要看具体项目加上静态文件的目录。


在运行python run_wsgi.py之后,该程序会监听8000端口。因此,可以在浏览器中使用http://http://127.0.0.1:8000/d.html  查看d.html模板。

如果模板中有参数,就可以在链接中加入需要的参数值。如下为d.html模板:

test ${a} 

则查看http://127.0.0.1:8000/d.html?a=mako,则会显示test mako


如果模板中有数组参数,如:

test ${a}
% for i, value in enumerate(names):
${i+1}. ${value}
% endfor  

则可以使用链接http://127.0.0.1:8000/d.html?a=mako&names=tom&names=cat 进行查看,显示如下内容:

test mako
1. tom
2. cat 

由此可以看出,通过url中参数的不同组合,可以在没有业务逻辑程序的支持下直接调试模板,方便了模板的编写和分工。

No comments:

Post a Comment