2014-08-29 66 views
0

我在我的Google appengine中有一個頁面,需要根據通過頁面URL提供的參數從數據存儲中獲取記錄。該頁面的URL看起來像http://example.appspot.com/page/WILDCARD/,其中WILDCARD是記錄的唯一標識符(32個字符的十六進制字符串)。然後它會記錄WILDCARD指定的記錄並將其顯示在模板page.html上,或者至少這是它應該執行的操作。無論何時我以http://example.appspot.com/page/WILDCARD/的身份訪問該頁面,都會收到404錯誤。有誰知道爲什麼/有誰可以提出爲什麼這可能是原因?謝謝。Appengine通配符URL問題

在我WSGI類處理程序,我有

('/page/([^/]+)/', PageHandler), 

PageHandler類本身就是

class PageHandler(webapp2.RequestHandler): 
    def get(self, recordID): 
      allrecords = db.GqlQuery("SELECT RECORD FROM RECORDS WHERE recordid = :record",record = recordID) 
      if not allrecords: 
       self.redirect("../") #the URL is screwed up, so we're redirecting you back to the main page 
      else: 
       for row in allrecords: 
        template = JINJA.get_template("page.html") 
        self.response.out.write(template.render({ "recordtext":row.RECORD, "recordid":recordID })) 

其他細節:JINJA只是默認神社的環境,我敢肯定,沒有什麼那是錯的。 RECORDS是一個db.Model類型類,它具有成員RECORD(文本屬性)和recordid(字符串屬性)。目前尚未填充任何數據。

編輯:沒關係,我解決了這個問題。當我簡化問題時,這是我自己的愚蠢。事實證明,在實際實施中(即這個例子的複雜版本),我認爲我的網址和它實際用於/ page /之間的差異很小。道歉。

+0

你可以鏈接你的app.yaml嗎?我認爲重定向可能根本就不會在那裏正確地進行。 – Patrice 2014-08-29 17:25:53

+0

我的app.yaml從這個簡單的例子非常不同,但唯一的線在我的YAML配置相關與這個頁面的處理程序是: - 網址:* 腳本:main.app 安全:總是 – user3059347 2014-08-29 18:37:48

回答

1

嘗試

webapp2.Route('/page/<recordID>/', handler=PageHandler) 

您的路由定義。

您可以沿着您的其它路線的元組就像插入:

app = webapp2.WSGIApplication([ 
    ('/', Homepage), 
    webapp2.Route('/page/<recordID>/', handler=PageHandler), 
    ('/otherpage', SomeOtherPage) 
]) 

你有什麼可能與適當的正則表達式正常工作很好,但我覺得它更容易使用的模板的網址定義預期路徑,並命名時讀取代碼他們。

查看更多:https://webapp-improved.appspot.com/guide/routing.html

+0

實際上我用' app = webapp2.WSGIApplication([urls和handlers的元組])'作爲我的應用程序定義,就像在基本的Appengine Python教程中使用的那樣。你能告訴我如何使用上面的很多頁面/鏈接到資源使用上述和/或修改用於WSGIApplication方法嗎?對不起,我有點小菜一碟! – user3059347 2014-08-29 18:41:48

+0

你可以簡單地沿着你的其他元組插入這一行,看到更新的答案,因爲顯然我不能在這裏寫代碼。 – 2014-08-29 19:04:34

+0

嗯,這很奇怪,頁面仍然會導致一個404。 – user3059347 2014-08-29 19:13:56

0

沒關係,我解決了這個問題。當我簡化問題時,這是我自己的愚蠢。事實證明,在實際實施中(即這個例子的複雜版本),我認爲我的網址和它實際用於/ page /之間的差異很小。道歉。