本站首页    管理页面    写新日志    退出


«August 2025»
12
3456789
10111213141516
17181920212223
24252627282930
31


公告
 本博客在此声明所有文章均为转摘,只做资料收集使用。

我的分类(专题)

日志更新

最新评论

留言板

链接

Blog信息
blog名称:
日志总数:1304
评论数量:2242
留言数量:5
访问次数:7584045
建立时间:2006年5月29日




[TurboGears]Turbogears中文文档/20分钟wiki指南/4
软件技术

lhwork 发表于 2007/2/16 12:12:43

用户友好的URL现在已经做好的系统让我不爽的一点是URL不够美观."/Foo"不比"/?pagename=Foo"漂亮的多?幸运的是,要做到这一点很简单我们只需要在Controller.py里面加一个default方法,无论何时在cherrypy没有其他方法对应URL时就会呼叫这个方法(Cherrypy2.1,CherryPy2.2已经作改动)@turbogears.expose(html="wiki20.templates.page") def default(self, pagename):  return self.index(pagename) 现在我们就可以在save方法里改动HTTPRedirect参数为turbogears.url("/%s" % pagename).怎么处理WiliWords?WiliWords也叫WordsSmashedTogether(挤在一起的几个词).一个典型的wili应该在发现wikiwords时能自动为这些词产生连接.这个主意听上去不错,怎么处理这个问题?我们自然而然的会想到正则表达式.我们从import正则表达式开始:import re一个wikiword的构成是这个样子的:(以一个大写字母开头,然后是一堆小写字母)*n.用正则表达式表示wikiword为:wikiwords = re.compile(r"\b([A-Z]\w+[A-Z]+\w+)")把这句话放在我们的Root controller类上面.之后我们就需要真正用这个表达式了.在publish_parts下面(index方法)加上:root = str(turbogears.url("/"))content = wikiwords.sub(r'<a href="%s\1">\1</a>' % root, content)现在添加一个wikiwords到我们的页面,然后当你浏览这个页面时,你就会看到一个连接.当然,这时候点击那个连接会显示错误页面在哪?现在应该在代码里加上对不存在页面的检查.我在这里的处理很简单:如果一个页面部存在,你就会被连到一个编辑页面上.在index方法中我们检查是否一个页面存在,如果不存在,我们重定向到一个新的notfound方法,现在我们就来修改index方法:try:    page = Page.byPagename(pagename) except SQLObjectNotFound:    raise cherrypy.HTTPRedirect(turbogears.url("/notfound", pagename= pagename)) 我们需要import这个SQLObjectNotFound异常,在文件顶端加上这一句话:from sqlobject import SQLObjectNotFound 下面,我们就来添加not found方法,我们直接用edit模板@turbogears.expose(html="wiki20.templates.edit") def notfound(self, pagename):  return dict(pagename=pagename, data="", new=True) 请注意返回的dictionary中包括一个变量叫"new",在edit方法里我们也在返回的dictionary中加上new=falsereturn dict(pagename=page.pagename, data=page.data, new=False)我们需要能够保存一个新的页面,自然,我们要修改save方法:@turbogears.expose() def save(self, pagename, data, submit, new):    hub.begin()    if new == "True":    page = Page(pagename=pagename, data=data)    else:    page = Page.byPagename(pagename)    page.data = data    hub.commit()    hub.end()    turbogears.flash("Changes saved!")    raise cherrypy.HTTPRedirect(turbogears.url("/%s" % pagename)) 记得我们在命令行中创建了我们的第一个页面,创建一个SQLObject对象会自动在数据库里添加一个新的纪录我么要做的最后一件事情就是通过edit.kid模板向save方法传递"new"变量<input type="hidden" name="new" value="${new}" />试一下,现在你就能编辑新页面了


阅读全文(3307) | 回复(0) | 编辑 | 精华
 



发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)



站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.059 second(s), page refreshed 144768472 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号