web.py / pythonpath 混淆

2 投票
3 回答
1447 浏览
提问于 2025-04-16 11:11

我正在尝试使用 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,所以如果我说错了,请纠正我)

撰写回答