web.py / pythonpath 混淆
我正在尝试将 web.py 作为一个轻量级 Web 框架。当我尝试将页面的实际实现移动到单独的文件而不是根文件中时,我遇到了问题。作为演示,我的 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()
我将我的实现移至与 core.py 处于同一级别的名为 index.py 的文件中。我的实现如下所示:
class index:
def GET(self):
return "Hello world"
但是,每当我运行应用程序时,我都会收到错误:
有人能告诉我发生了什么事吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
根据 http://webpy.org/tutorial3.en#urlhandling,web.py 做了一个在全局命名空间中查找您在 url 中指定的类。
在您的 core.py 中,没有名为 index 的类(在您移动它之后),这就是导致此 keyerror 的原因。在我的测试中,我可以通过在 core.py 中导入索引类来解决这个问题。
(之前没有使用过web.py,如有错误请指正)
According to http://webpy.org/tutorial3.en#urlhandling, web.py does a lookup for the classes you specified in your urls in the global namespace.
In your core.py there is no class named index (after you moved it), that's what causes this keyerror. In my test I could fix that by importing the index class in core.py.
(I haven't used web.py before, so please correct me if I'm wrong)
您可以添加点以爬入模块。假设您有一个文件夹controllers,其中包含一个名为file.py的文件,并且您想要访问名为index的控制器:
You can add dots to crawl into modules. So say you have a folder controllers with a file named file.py and you wanted to access the controller named index:
我猜这个错误是在你的模板中。当我忘记模板中 if 语句上的“:”时,我遇到了此错误。
I'm guessing the bug is in your template. I hit this error when if forgot a ':' on an if statement in my template.