首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >webapp2路由失败

webapp2路由失败
EN

Stack Overflow用户
提问于 2011-12-13 06:14:21
回答 1查看 2.7K关注 0票数 2

我希望webapp2路由会很容易,但显然(对我来说)并非如此。

这个问题与webapp2 route fails类似,因为代码几乎相同,但当我使用webapp2.Route时,我只得到404个错误,而当我使用laze路由时(正如上面提到的另一个问题中的解决方案),我得到了这个彩色的错误消息:

代码语言:javascript
复制
ERROR    2011-12-12 17:09:25,996 wsgi.py:186]
Traceback (most recent call last):
  File "/home/user/sdk/google_appengine/google/appengine/runtime/wsgi.py", line 174, in Handle
    result = handler(self._environ, self._StartResponse)
  File "/home/user/sdk/google_appengine/lib/webapp2/webapp2.py", line 1519, in __call__
    response = self._internal_error(e)
  File "/home/user/sdk/google_appengine/lib/webapp2/webapp2.py", line 1511, in __call__
    rv = self.handle_exception(request, response, e)
  File "/home/user/sdk/google_appengine/lib/webapp2/webapp2.py", line 1505, in __call__
    rv = self.router.dispatch(request, response)
  File "/home/user/sdk/google_appengine/lib/webapp2/webapp2.py", line 1253, in default_dispatcher
    return route.handler_adapter(request, response)
  File "/home/user/sdk/google_appengine/lib/webapp2/webapp2.py", line 1076, in __call__
    handler = self.handler(request, response)
TypeError: __init__() takes exactly 1 argument (3 given)
INFO     2011-12-12 17:09:26,061 dev_appserver.py:2753] "GET / HTTP/1.1" 500 -
INFO     2011-12-12 17:09:26,606 dev_appserver.py:2753] "GET /favicon.ico HTTP/1.1" 200 -

如果我可以使用webapp2.Route就好了,因为它带来了额外的功能(例如命名)。然而,这两个似乎都不适合我。简而言之,我的代码是这样的:

app.yaml

代码语言:javascript
复制
application: test-app
version: 1
runtime: python27
api_version: 1
threadsafe: true

handlers:
- url: /favicon\.ico
  static_files: static/images/favicon.ico
  upload: static/images/favicon\.ico

- url: .*
  script: main.site_app
  login: required

libraries:
- name: django
  version: "1.2"

main.py

代码语言:javascript
复制
import os
os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'

import webapp2
import urls

site_app = webapp2.WSGIApplication(urls.SITE_URLS, debug=True)

urls.py (带有webapp2.Route)

代码语言:javascript
复制
import webapp2

import handler

SITE_URLS = [
  webapp2.Route(r'^/$', handler.TestHome),
  webapp2.Route(r'^/test/(\w+)$', handler.TestPage)
]

urls.py (使用webapp2惰性路由)

代码语言:javascript
复制
import handler

SITE_URLS = [
  ('/', handler.TestHome),
  ('/test/(\w+)', handler.TestPage)
]

handler.py

代码语言:javascript
复制
import os
import webapp2
from google.appengine.ext.webapp import template

class TestHome(webapp2.RequestHandler):

  def get(self):
    self.response.write(template.render(
        os.path.join(os.path.dirname(__file__), 'templates/browse.html'), {}
      )
    )


class TestPage(webapp2.RequestHandler):

  def get(self, test_key):
    self.response.write(template.render(
        os.path.join(os.path.dirname(__file__), 'templates/browse.html'),
        {'test_key': test_key}
      )
    )

templates/browse.html

代码语言:javascript
复制
<html>
<head>
  <title>Success!</title>
</head>
<body>
Success!
{% if test_key %}- {{ test_key }}{% endif %}
</body>
</html>

我做错了什么?非常感谢您的任何帮助/建议!谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-12-13 10:16:06

下面是捕获urls的正确正则表达式

代码语言:javascript
复制
SITE_URLS = [
    webapp2.Route(r'/', handler.TestHome),
    webapp2.Route(r'/test/<:\w+>', handler.TestPage)
]

您还可以通过添加以下内容来获得命名路由

代码语言:javascript
复制
 webapp2.Route(r'/test/<your_route_name_here:\w+>', handler.TestPage)

当你有更多的参数,和/或更喜欢保持你的代码尽可能的干净时,命名路由通常是有帮助的。举个例子

代码语言:javascript
复制
webapp2.Route(r'/test/<category:\w+>/<user_id>/<day:\d+>', handler.TestPage)

反映

代码语言:javascript
复制
class TestPage(webapp2.RequestHandler):
    def get(self, category, user_id, day):
        ...

关于这个回溯-我没有它,但是我使用了GAE prod env (据我所知,您是在开发环境中),所以尝试将webapp2更新到最新版本,并确保您在与app.yaml中定义的相同py版本上运行代码

HTH。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8481653

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档