Blog模板
前阵子为模板折腾了许久,换来换去试了不少模板,有下载的,也有自己做的,都不是很满意。这个模板修改自Elegant WP Themes的33module,原来是3栏样式,很简洁,是我喜欢的样子,不过我更喜欢2栏,于是自己动手修改。用了一段时间,自己还是挺满意的, :-) 可能会用比较长的一段时间。
前阵子为模板折腾了许久,换来换去试了不少模板,有下载的,也有自己做的,都不是很满意。这个模板修改自Elegant WP Themes的33module,原来是3栏样式,很简洁,是我喜欢的样子,不过我更喜欢2栏,于是自己动手修改。用了一段时间,自己还是挺满意的, :-) 可能会用比较长的一段时间。
GAE目前还不允许用户操作文件系统,上传的图片只能通过数据库存取。以下的代码实现了shop表中logo图片的动态显示:
class showShopLogo(webapp.RequestHandler): def get(self): shopid = self.request.get('sid') shop = Shop.get_by_id(int(shopid)) if (shop and shop.logo): img = images.Image(shop.logo) img.resize(width=128, height=128) tumbimg = img.execute_transforms(output_encoding=images.PNG) self.response.headers['Content-Type'] = 'image/png' self.response.out.write(tumbimg) else: self.redirect('/images/nologo.png')
定义处理路径:
application = webapp.WSGIApplication(
[ ...
('/shop/logo', showShopLogo),
( ...)
], debug=True)
wsgiref.handlers.CGIHandler().run(application)
我们可以通过http://example.com/shop/logo?sid=5这样的格式访问图片,在模板文件中,用<img src=”/shop/logo?sid={{shop.key.id}}” />实现图片的显示。
最近申请了google app engine服务,可以尝试用python做网页。早年曾经接触过一点django,断断续续地看了一点文档,
但是除了limodou的step by step里的示例外,也没做过其他什么的了。但是优雅的python仍然是我最喜欢的语言,时不时地总会去关注它。GAE的发布对诸多python爱好者来说,真是一个好消息。
plog是kommit写的一个在google app engine上运行的blog,目前的功能还比较简单,用来学习挺不错的,代码不多,加上python语言易懂,基本都能看明白。昨天看到kommit说plog的默认模板难看,我觉得也是:-), 于是萌生了做一个模板试试看,也可以更了解GAE的web框架。说干就干,昨晚动手到今天完成。除了template和style文件的修改外,还修改了一些代码,效果可以看一下演示。
kommit计划重构plog,重构后plog会实现简便的模板定制功能和插件接口,我期待着一个功能完善、使用便捷的plog。
有时,我们完成的网页浏览时发生“Warning: session_start(): Cannot send session cookie - headers already sent by (output started at…”的错误。一般的原因是在运行session_start()时,之前已经有实际的html内容输出了,只要将session_start ()的调用移到网页开头部分就能解决。
但是,在Dreamweaver设计中,产生这一问题往往不是上述原因,DW自动产生的代码不会犯如此低级的错误。通常是由于文件UTF-8格式转换或使用网上下载的网页、模板时,文件开始处被插入BOM(Byte Order Mark,字节序标记),正是这个BOM影响到了session的正常运行。
解决的办法也很简单,只要用Ultraedit打开文件,执行另存为,保存时选择“UTF-8 无BOM”即可。如问题依旧,检查session_start函数前的不同PHP代码块之间是否有空行,一般将空行删除即可。
<?php require_once(’Connections/conn.php‘); ?> (空行删除) <?php if (!isset($_SESSION)) { session_start(); } …
另外,header转发也有可能产生此类问题,比如:header(sprintf(”Location:%s”,$insertGoTo)),也可以用以上方法解决。