web.py / pythonpath 混淆
我正在尝试使用 web.py 这个轻量级的网页框架。现在我遇到了一些问题,想把我的网页实现代码放到一个单独的文件里,而不是放在主文件里。为了演示,我的 core.py 文件是这样的:
import web, sys, os
sys.path.append(os.path.abspath(os.path.dirname(__file__)))
urls = (
'/', 'index'
)
app = web.application(urls, globals())
render = web.template.render('templates/')
if __name__ == "__main__":
app.run()
我把实现代码移动到了一个叫做 index.py 的文件里,这个文件和 core.py 在同一个层级。我的实现代码是这样的:
class index:
def GET(self):
return "Hello world"
但是,每当我运行我的应用程序时,就会出现一个错误:
<type 'exceptions.KeyError'> at /
有没有人能告诉我这是怎么回事?
3 个回答
0
我猜这个问题出在你的模板里。当我在模板中的if语句忘记加一个':'时,也遇到过这个错误。
3
你可以通过添加点来进入模块。比如说,你有一个名为 controllers 的文件夹,里面有一个叫 file.py 的文件,如果你想访问名为 index 的控制器,可以这样做:
from controllers import *
urls = (
'/', 'controllers.file.index'
)
4
根据 http://webpy.org/tutorial3.en#urlhandling 的内容,web.py 会在全局范围内查找你在网址中指定的类。
在你的 core.py 文件中,没有名为 index 的类(因为你已经移动了它),这就是导致这个键错误的原因。在我的测试中,我通过在 core.py 中导入 index 类来解决了这个问题。
from index import index
(我之前没有使用过 web.py,所以如果我说错了,请纠正我)