2013-06-06 50 views
0

我遇到了URI Route的問題。webapp2具有多個路由的DomainRoute

http://www.example.com - OK 
http://www.example.com/en - 404 
http://www.example.com/bm - 404 
http://www.example.com/my - 404 
http://www.example.com/zh - 404 
http://www.example.com/cn - 404 

它看起來像忽略了我的第二條路線,我的路線有什麼問題?

app = webapp2.WSGIApplication([ 
routes.DomainRoute(r'<:(localhost|example\.com|www\.example\.com)>', [ 
    webapp2.Route('/', handler=WebHome, name='WebHome'), 
    webapp2.Route('/(en|bm|my|cn|zh)', handler=WebHome, name='WebHome'), 
    webapp2.Route('/(en|bm|my|cn|zh)/', handler=WebHome, name='WebHome'), 
]), 

routes.DomainRoute(r'<:(m2.example.com|m.example.com)>', [ 
    webapp2.Route('/', handler=MobileHome, name='MobileHome'), 
    webapp2.Route('/(en|bm|my|cn|zh)', handler=MobileHome, name='MobileHome'), 
    webapp2.Route('/(en|bm|my|cn|zh)/', handler=MobileHome, name='MobileHome'), 
]),], 
debug=True) 

我webhome類

class WebHome(webapp2.RequestHandler): 
    def get(self, language='en'): 
    buf = 'home for %s' % (language,) 
    self.response.write(buf) 
+1

我不明白爲什麼您使用相同的名稱(如WebHome)爲不同的路線。這個名字可以用來構建一個uri。也許這是你的問題的原因。 – voscausa

回答

1

webapp2.Route使用<>,沒有括號。此外,選擇只有一個路由的name參數,如果他們都使用相同的handler

app = webapp2.WSGIApplication([routes.DomainRoute(r'<:(localhost|mysite\.com|www\.mysite\.com)>', [ 
    webapp2.Route('/', handler=WebHome), 
    webapp2.Route('/<language:en|bm|my|cn|zh>', handler=WebHome), 
    webapp2.Route('/<language:en|bm|my|cn|zh>/', handler=WebHome, name='WebHome'), 
]), 

routes.DomainRoute(r'<:(m2.mysite.com|m.mysite.com)>', [ 
    webapp2.Route('/', handler=MobileHome), 
    webapp2.Route('/<language:en|bm|my|cn|zh>', handler=MobileHome), 
    webapp2.Route('/<language:en|bm|my|cn|zh>/', handler=MobileHome, name='MobileHome'), 
]),], debug=True)