May 29

[原]Python 框架TurboGears 2 入门文档《Wiki Tutorial》翻译校正 雨

linuxing , 16:00 , 编程 » Python , 评论(1) , 引用(0) , 阅读(141423) , Via 本站原创 | |


五、关于WikiWords
Wiki 与其他系统比较,较特别的是会根据特殊格式的单词创建链接,这些单词称为WikiWords,通常是驼峰格式的单词,例如:RedFlag 等。而在Wiki 系统中,这应该由正规表达式匹配来实现。由正规表达式匹配后自动单词后,替换为HTTP链接形式。

此外,新的WikiWords 因数据库中没有对应的键和内容,所以如果点击一个新的WikiWords ,DBSession执行查询时,会报InvalidRequestError 异常。所以,应该把查询放到try:except 语句里面,并捕捉该异常。当发生异常时,转到创建新WikiWords 页面。
1. 控制器部分
root.py 控制器代码如下:


这里导入re 和docutils 的publish_parts 方法,由publish_parts 对数据库中的page.data 内容生成HTML 格式。因该内容将会插入到视图模板的HTML 文件中的,所以通过["html_body"] 分片,仅保留body部分即可。

tg的url() 方法可以按当前URL生成合适的相对路径,原文是转发到根路径的(_default 或 index 下面),而我上面定义的是page 动作,所以,应该转到/page/ 动作中。

wikiwords 是在开头定义的正规表达式,以r 开头的字符串,表示按字符原文理解,这适合用于定义正规表达式的环境。然后wikiwords.sub 方法则按替换的方式,生成WikiWords 的链接。可见,只要符合驼峰格式的单词,都会生成链接,而无论该单词是否已经存在。

如果WikiWords 不存在,那么点击该WikiWords 就会发生InvalidRequestError 异常,代码中捕捉到该异常后,会执行redirect() 动作,以带pagename 参数方式转到notfound 动作页面。(原文是当前路径是根路径,所以用"notfound",而我这里当前路径是/page,所以应该用"/notfound" )

这里还看到如何把多个变量(content、wikipage)通过dict() 以字典的形式推送到视图模板。

最后,就是再定义一个notfound 动作的方法,用于在数据模型中插入新的WikiWords 行。这里没有判断page 是否为空,就由DBSession.add() 方法在数据库中加入一个以WikiWords 为pagename 的行,data 部分由save() 动作时写入。如果对这不满意,可以自行修改。
※ 注意:原文中没有从sqlalchemy.exc 导入InvalidRequestError 异常类,打开页面时会报错的。

2. 视图模板
为了对应上述控制器推送的content 变量,需要修改视图模板。不过,content 是HTML 代码(publish_parts() 产生的),而Genshi 对模板渲染时,会自动把HTML 代码相关的标签转码。例如:小于号会用< 表示。
所以,我们需要在content 输出时,采用Markup() 方法避免转码。
wiki20.templates.page 内容如下:


我们把FrontPage的内容修改为“initial data. From RedFlag.”,那么保存后打开,会发现,RedFlag 已经变成WikiWords:
点击在新窗口中浏览此图片

点击RedFlag 文字的链接,会转到notfound 动作页面,pagename 参数就是RedFlag:
点击在新窗口中浏览此图片

六、增加PageList 列表
每个WikiWords 对应一个Page,这工作主要用于显示所有WikiWords (即Page),以便快速切换和访问。
1. 创建控制器
同样是root.py 中,加入pagelist 动作:


2. 创建视图模板
pagelist.html 的内容如下:


关键是其中如何显示遍历的写法。

3. 显示导向的链接
修改page.html 模板,加入一个导向pagelist 页面的链接:


再次打开page动作页面:
点击在新窗口中浏览此图片

点击"View the page list"文字按钮:
点击在新窗口中浏览此图片

至此,该入门文档基本结束。文档中建议,后续可以从三方面进一步学习:
1. 通过jQuery 增加JSON 支持,可以看看:Adding JSON with MochiKit to the wiki20
2. 学习Genshi 模板渲染引擎的用法;
3. 学习SQLAlchemy ORM 框架的用法。

七、附录
测试源码下载:
下载文件
这个文件只能在登入之后下载。请先 注册登入
内文分页: [1] [2] [3]
Tags: ,
hain
2014/05/22 18:10
楼主,我也在看turbogears 2。但还是觉得没法用来做网站,咋搞?
linuxing 回复于 2014/05/23 16:41
不想麻烦,还是用Django 吧。
分页: 1/1 第一页 1 最后页
发表评论
表情
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
打开HTML
打开UBB
打开表情
隐藏
记住我
昵称   密码   游客无需密码
网址   电邮   [注册]