WEBPY /提供静态文件:“ StaticApp对象没有属性”目录”

时间:2018-09-21 08:08:05

标签: python eclipse web.py

在我的web.py应用程序中提供文件时遇到一些问题: Python 3.7 web.py ver0.40_Dev1 Eclipse Photon版本(4.8.0)

app.py:

import web

render = web.template.render('templates/')

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

class index:
    def GET(self):
        return render.index()

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

templates / index.html:

<html>

    <h2>HELLO</h2>          <img src = "/static/image.png">

</html>

我手动创建了/ templates和/ static文件夹 在本地主机上显示索引时出现以下错误:

> AttributeError("'StaticApp' object has no attribute 'directory'")
> Traceback (most recent call last):   File
> "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/web/wsgiserver/wsgiserver3.py",
> line 1089, in communicate
>     req.respond()   File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/web/wsgiserver/wsgiserver3.py",
> line 877, in respond
>     self.server.gateway(self).respond()   File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/web/wsgiserver/wsgiserver3.py",
> line 1982, in respond
>     for chunk in response:   File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/web/httpserver.py",
> line 255, in __iter__
>     path = self.translate_path(self.path)   File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/http/server.py",
> line 820, in translate_path
>     path = self.directory AttributeError: 'StaticApp' object has no attribute 'directory'

尝试:(带有图片的根)

<img src = "/image.png">

返回偶然的404错误(应该从/ static提供文件服务吗?)

到达:localhost / static

  

返回“未找到”

http://webpy.org/cookbook/staticfiles似乎告诉我/ static文件提供的文件由web.py自动处理? (或者我不明白)

无论如何:我无法在我的app.py中提供任何文件...

有什么帮助吗?

4 个答案:

答案 0 :(得分:0)

您的代码不错,但看来您与python库混在一起了。

“目录”已在python 3.7中引入http.server.SimpleHTTPRequestHandler。这是webpy的StaticApp继承的类。但是,看来您的web.py编译版本使用的是SimpleHTTPRequestHandler的较早版本,该版本未定义directory。我不知道这是怎么发生的,尽管您提到您正在使用Eclipse(我正在猜测)正在处理编译依赖项。

我建议您清除已编译的.pyc / .pyo,然后重试。

答案 1 :(得分:0)

最近两天我才开始学习Python,因此请原谅任何n00b问题。

一个小时左右的时间里,我一直在为完全相同的问题而苦苦挣扎,并对为什么似乎还没有解决方法感到困惑……我有点之以鼻,似乎可以使它正常工作,直到有人正式提供解决方案为止。

要做两件事:

  1. 我在⁨server.py⁩中对/⁨Library/⁨Frameworks/Python.framework/⁨Versions/⁨3.7⁩/lib/⁨python3.7/⁨http进行了更改,并修改了第820行,如下所示:

    path = self.directory已修改为path = self.path

    虽然这似乎消除了StaticApp object bla bla错误,但是在尝试加载静态内容时,我仍然遇到连续的404。这导致我在互联网上找到一条小帖子,导致了以下问题……

  2. 我没有在PyCharm中通过点击Run来运行我的Python应用,而是在终端窗口中运行了python3 controller.py,其中controller.py是我的Python MVC控制器-低端又看得出这似乎可行!

我实在不知道为什么在终端机中运行而不是在PyCharm中运行是可行的-但我想将其放在这里。

希望有人很快能解决问题,这在尝试学习新语言时是一个很大的麻烦!

答案 2 :(得分:0)

Webpy未针对python 3.7更新。安装python 3.6.1为我解决了这个问题。它应该适用于任何python 3.6子版本。

答案 3 :(得分:0)

有一个拉取请求正在等待一段时间,现在要合并到web.py中:https://github.com/webpy/webpy/pull/468/files

在站点包中调整来自webpy的文件: web / httpserver.py

添加:

self.directory = os.getcwd()

之后:

self.start_response = start_response

现在可以与我一起运行带有web.py 0.40.dev1的Python 3.7.3