1、c=tmpl_context, g=app_globalsPylons 0.9.x 中两个最常用的变量分别用一个字母标识。 g 代表全局对象,c 则代表控制器传递给模板的对象。在 Pylons 1.0 中,g 需要替换做 app_globals,c 要替换做 tmpl_context。如果觉得 c,g 用起来更方便,也可以在代码中用如下语句建立别名from pylons import app_globals as gfrom pylons import tmpl_context as c但是,这不是万能的,在单元测试框架的代码中,TestResponse 对象包含的 tmpl_context
2、就不能用 c 来代替。因此建议彻底替换代码中的 c 和 g 对象名称。redirect_to = redirect在 Pylons 0.9.x 代码中,网页重定向用的是 redirect_to 语句。在 Pylons 1.0 中要用 redirect 替换,同时注意修改相应的导入语法。将from pylons.controllers.util import redirect_to或者form routes import redirect_to替换为from pylons.controllers.util import redirecturl_for = url构造 url 地址语法需要由 py
3、lons 0.9.x 的 url_for 换做 url。并注意对于非命名映射地址,至少需要提供 controller 和 action 参数。pylons 0.9.x 在模板中的 url_for 往往可以省略的 controller 参数,在 pylons 1.0 中不能省略。例如:下列 0.9.x 的调用return redirect_to(h.url_for(controller=security, action=failed)redirect_to(h.url_for(controller=checkh.url_for(action=view, id=logsi.get(revision
4、,), .替换为 pylons 1.0 的调用return redirect(url(controller=redirect(url(controller=,action=indexurl(controller=logsstylesheet_link_tag = stylesheet_link旧版本 WebHelpers 的仿照 ROR 实现的 rails 类在新的 WebHelpers 被取消了,包含 stylesheet 文件的调用需要改写。原语法from webhelpers.rails.asset_tag import stylesheet_link_tag$h.stylesheet_
5、link_tag(/css/common, media=all)新语法from webhelpers.html.tags import stylesheet_link$h.stylesheet_link(h.url(/css/common.css), media=javascript_include_tag = javascript_link同样由于 WebHelpers.rails 的取消,原来一条 javascript_include_tag 就可以包含所有相关 javascript 脚本的语句要用多条的 javascript_link 替代。from webhelpers.rails.a
6、sset_tag import javascript_include_tag$h.javascript_include_tag(builtins=True)from webhelpers.html.tags import javascript_link$h.javascript_link(h.url(/javascripts/prototype.js)/javascripts/scriptaculous.js/javascripts/unittest.jsscriptaculous 内置支持被取消WebHelpers 旧版本仿照 ROR,使用 scriptaculous 实现页面特效。但是新版
7、本 WebHelpers 不再内置 Javascript 框架和特效支持,而是将选择权交给用户。由用户决定是使用 jQuery, Prototype, jQueryUI, scriptaculous 或者 ExtJs。模板中原语法complete=hideNoticesPopup();+h.visual_effect(Highlight, acl_msg, duration=1),直接调用 scriptaculous JavaScript 函数:onComplete:function(request)hideNoticesPopup();new Effect.Highlight(acl_msg
8、,duration:1);,form_remote_tag 被取消WebHelpers 中仿照 rails 的 form_remote_tag 也不复存在。直接写 HTML 吧,虽然麻烦些模板中直接写 Form 元素进行替换:form action=$h.url(controller=repos) id=main_form method=POST onsubmit=showNoticesPopup(); new Ajax.Updater(message ) asynchronous:true, evalScripts:true, method: onComplete: parameters:F
9、orm.serialize(this); return false;传递给模板的外部变量直接显示要先转码Pylons 旧版本传递给模板的 c 变量可以包含 HTML 代码,并可以不经过处理直接显示在模板中:div id=logs$c.display/div新版本 Pylons 会对变量中 HTML 标签进行转换,要直接显示的写法如下 context.write(tmpl_context.display);WebTest 升级导致测试用例失效测试框架中获取页面的 webtest.TestResponse 对象数据结构改变 status 属性值由 int 改为字符串 res = self.app.
10、get(url_for(controller=authzassert res.status = 302, res.status要改为新语法:res = self.app.get(url(controller=assert res.status = 302 Found, res.status header 属性改名为 headers, headerlocation 可以直接用 location 属性assert res.header().endswith(/login), res.header()assert res.location.endswith(), res.location 控制器传参
11、 c 改名为 tmpl_context res = self.app.get(url(controller=assert res.c.reposlist = u/, udocumentproject1project2repos1repos2repos3, res.c.reposlistassert res.tmpl_context.reposlist = u, res.tmpl_context.reposlist以上是向 Pylons 1.0 迁移的主要注意事项。既然 Pylons 已经升级为 1.0 版本,相信框架的稳定性将会得到改善。梦醒了。Pylons,Python分享文章这篇文章由蒋 鑫于 2010年6月1日 - 22:28发表于北京群英汇信息技术有限公司,分类于Python。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1