清单 15. 分类页 kid 模板文件(product.kid) 网管u家u.bitsCN.com
<table id="product-info">
<tr>
<td class="fld">Name:</td>
<td class="val"><span py:replace="product.name" /></td>
</tr>
<tr>
<td class="fld">SKU:</td>
<td class="val"><span py:replace="product.sku" /></td>
</tr>
<tr>
<td class="fld">Price:</td>
<td class="val">$<span py:replace="'%.2f' % product.price" /></td>
</tr>
</table>
网管网www.bitscn.com |
网管联盟bitsCN_com
网管有家www.bitscn.net
图 3 给出了产品显示页面:
网管u家bitscn.net
图 3. 产品显示页面
网管有家bitscn.net
错误处理
中国网管论坛bbs.bitsCN.com
控制器方法尚未考虑的一件事是 SQLObject 的 get 方法所抛出的 SQLObjectNotFound 异常。清单 16 给出了捕获这个异常并将其作为 NotFound 异常重新抛出的方法,这会发送一个基本的 HTTP 404 错误: 网管朋友网www_bitscn_net
清单 16. 向 Controller 类添加的错误处理
from model import Category, Product
from sqlobject import SQLObjectNotFound
from cherrypy import NotFound
from turbogears import controllers, expose, url
class Root(controllers.Root):
@expose("tgcommerce.templates.category")
def category(self, categoryID):
try:
category = Category.get(categoryID)
except SQLObjectNotFound:
raise NotFound()
return dict(category=category)
@expose("tgcommerce.templates.product")
def product(self, productID):
try:
product = Product.get(productID)
except SQLObjectNotFound:
raise NotFound()
return dict(product=product)
中国网管论坛bbs.bitsCN.com |
网管联盟bitsCN@com
处理找不到对象的错误的另外一个策略不是发送 404 错误,而是对其进行重定向。这是使用 turbogears.redirect(...) 方法实现的: 网管下载dl.bitscn.com
清单 17. 重定向的例子
from turbogears import redirect
try:
object = ClassName.get(objectID)
except SQLObjectNotFound:
raise redirect("/path_to_redirect")
网管有家bitscn.net |
网管u家www.bitscn.net
网管联盟bitsCN@com
网管u家www.bitscn.net