1

我在以下发生了一个非常奇怪的错误:

class ServeHandler(blobstore_handlers.BlobstoreDownloadHandler):
def get(self, resource):
    iconKey = str(urllib.unquote(resource))

    if iconKey:
        blob_info = blobstore.get(iconKey)

        if blob_info:
            url = images.get_serving_url(blob_key=iconKey, size=200)

            self.response.out.write('<h1>%s</h1><small>%s</small><br/><br/><img src="%s" alt="%s">' % ('A Title', '11-26-1997', url, 'A Title'))

响应是这样的:

TypeError: get() takes exactly 1 argument (2 given)

该代码应该获取 URL 请求的结尾,将其传递给iconKeyvar,并将其用作 blob 键来访问图像的 blobstore 并使用该images.get_serving_url()方法创建一个服务 url。

有人遇到过这个吗?我尝试@staticmethod在定义上放置一个参数get,但是当然,这使得该get方法无法通过self.

编辑

我只是改变了一些东西,它得到了另一个错误。我一直在([^/]+)?为 URL 使用正则表达式 - URL 将在哪里,/view/icon/76M5e-xIStHRJDYyXBXjDA==传递给该get()方法的资源将是76M5e-xIStHRJDYyXBXjDA==URL 的结尾。

(.*)我只是根据@systempuntoout 下面的答案将正则表达式更改为。现在我收到此错误:AttributeError: split使用此堆栈跟踪:

ERROR    2011-07-15 13:19:39,949 __init__.py:463] split
Traceback (most recent call last):
File "/Users/mac/Desktop/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/ext/webapp/__init__.py", line 700, in __call__
handler.get(*groups)
File "/Users/mac/icondatabase/main.py", line 72, in get
iconKey = str(urllib.unquote(self.request))
File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/urllib.py", line 1164, in unquote
File "/Users/mac/Desktop/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib/webob/webob/__init__.py", line 500, in __getattr__
raise AttributeError(attr)
AttributeError: split
INFO     2011-07-15 13:19:39,958 dev_appserver.py:4217] "GET /view/icon/76M5e-xIStHRJDYyXBXjDA== HTTP/1.1" 500 -
INFO     2011-07-15 13:19:40,250 dev_appserver.py:4217] "GET /favicon.ico HTTP/1.1" 404 -
4

2 回答 2

1

您可能没有匹配resourceURL 正则表达式配置中的任何组参数。

确保在你的 main 中有这样的规则:

 application = webapp.WSGIApplication(
          [(r'/files/(.*)', ServeHandler)], debug=True)
    run_wsgi_app(application)

这将传递给resourceServeHandler 实例的 get() 参数,即在 route 之后匹配的字符串/files/

示例:
localhost:8080/files/A2312ODESDX将传递A2312ODESDXresource

于 2011-07-15T09:28:29.630 回答
0

您会混淆get两个不同类的方法:

  • BlobstoreDownloadHandler.get有两个参数,self并且resource.
  • webapp.RequestHandler.get只需要self
于 2011-07-15T06:15:12.740 回答