web.py使用时报错AttributeError: No template named image_window
在使用python的web.py框架做前后端时遇到问题。
问题代码主要如下,当加上main(iamge_name)这行代码后就会报错。报错信息包含两个:第一是找不到image_window模板;第二是gbk无法解码...
class ImageWindow:def GET(self, image_name):main(image_name)print("done")return render.image_window()
解决:
没有main函数时,可以成功找到并跳转到image_window界面;在有main函数运行时,可以看到打印了“done”,说明main函数是成功运行了,但会出现最开始说的报错。那么为什么加入正常运行的一个函数后,会导致报错呢?
原因在于,main函数中涉及了文件处理,使用以下代码改变了当前目录。
os.chdir(os.path.dirname(__file__))
当GET方法运行完main函数回来时,当前目录已经被改变了,导致无法找到相应的image_window模板。而编码错误是衍生错误,具体原因如下:
当第一个错误发生后,Web.py尝试生成调试错误页面(debugerror.py)在生成调试页面时,系统尝试用GBK编码读取你的Python源文件(可能是app.py)但你的源文件中包含UTF-8编码的特殊字符(比如注释中的中文),导致解码失败
所以在main函数的头尾分别加上这两行代码,使运行完main函数回到GET方法时,工作目录不变
original_dir = os.getcwd() # 保存原始目录os.chdir(original_dir) #恢复原始目录