web.py类导入错误

时间:2012-12-27 17:16:48

标签: python web.py

这是我的index.py(它位于文件夹/ NetWeave_Custom中)

import web
import lib.html

web.config.debug = True

urls = (
    '/', 'index',
)

class index:
    def GET(self):
        markup = html.abstr()
        print markup.element

if __name__ == "__main__":
    app.run()

app = web.application(urls, globals(), autoreload=False)
application = app.wsgifunc()

然后这是我的html.py(它在/ NetWeave_Custom / lib /中)

class abstr:
    element = 'Hello World';

但是我收到500内部服务器错误。谁能告诉我我做错了什么?我是web.py框架的新手。谢谢!

编辑:

使用上面的代码我得到错误: ImportError:没有名为lib.html的模块

最终编辑:

工作代码如下所示:

import web
from lib import html

web.config.debug = True

urls = (
    '/', 'index',
)

class index:
    def GET(self):
        markup = html.abstr()
        return markup.element

if __name__ == "__main__":
    app = web.application(urls, globals(), autoreload=False)
    app.run()

application = app.wsgifunc()

然后这是我的html.py(它在/ NetWeave_Custom / lib /中)

class abstr:
    element = 'Hello World';

浏览器显示:'Hello World' 因此,更改是在调用它之前定义应用程序(不是真正相关,但对于您来说严格必要 - 没有这个确实可以正常工作),返回markup.element而不是打印它,并创建一个空白的__init__.py文件lib子目录所以lib会被视为一个模块(或包?),据我所知。

谢谢!

2 个答案:

答案 0 :(得分:1)

您导入lib.html,但不要使用该全名。相反,您只需要html

如果收到导入错误,则找不到lib包;可能有两个错误之一:

  • 您应该使用import html代替,这也可以解决错误的引用。

  • lib目录缺少__init__.py文件(可以为空)。该文件将使它成为一个包,并允许您导入它。然后将对html的引用更改为lib.html

    class index:
        def GET(self):
            markup = lib.html.abstr()
            print markup.element
    

    将导入更改为:

    from lib import html
    

在定义之前,您还尝试运行app。将最后一行更改为:

if __name__ == "__main__":
    app = web.application(urls, globals(), autoreload=False)
    app.run()

最后但并非最不重要的是,您需要将NetWeave_Custom目录(完整的绝对路径)添加到PYTHONPATH;如果您使用mod_wsgi查看WSGIPythonPath指令。

答案 1 :(得分:0)

答案是双重的。我在lib子目录中没有__init__.py文件。另一个错误是我写了print而不是return markup.element ... Doh!