我正嘗試在GAE和Python中構建友好的URL查找方法。有沒有人這樣做?Google App Engine中的友好網址
我有它的工作,但它感覺非常不穩定。它的工作原理是它採用路徑(比如/ foo/bar /)並將其分割成一個列表。獲取列表中的最後一個元素並查詢數據庫中的匹配項。現在有一些令人頭疼的事情
如果有更多的'酒吧',因爲可能有另一個'酒吧',但在不同的頁面下,如何區分他們?到目前爲止,我的解決方案是迭代'bar'的結果,並查看它的父頁面的引用屬性。父'foo'也可能出現一次以上,所以現在我們必須迭代它。不難看出,這種雲很容易加起來大量的for循環。
只是爲了讓它變得更糟一個頁面可能能夠在一種語言和url需要匹配的語言。
我當前的數據存儲的設置是這樣的:
## Class to store pages.
class Pages(db.Model):
name = db.StringProperty()
## Some more properties for storing content
parentKey = db.SelfReferenceProperty()
## Class to store friendly url path segments
class UrlProvider(db.Model):
name = db.StringProperty()
path = db.StringProperty()
langCode = db.StringProperty()
page = db.ReferenceProperty(Pages)
而且使用firendly URL抓取網頁:
pageFromUrl = UrlProvider.gql('WHERE path = :path AND langCode = :lang', path = path, lang = templateObject.lang).fetch(100)
for pageUrl in pageFromUrl:
parentFromUrl = UrlProvider.gql('WHERE page = :page AND langCode = :lang', page = pageUrl.page.parentKey, lang = templateObject.lang).fetch(100)
for parentUrl in parentFromUrl:
if parentUrl.path == templateObject.path[-2]:
templateObject.url = parentUrl.path + '/' + path
page = pageUrl.page
它是什麼,它UrlProvider一切,在最後一個項目的比賽取templateObject.path列表。迭代它並獲取所有父母並嘗試匹配它。
截至目前它只適用於一個根頁面和一個子頁面。 我不知道如何使它更加動態和支持多個層次。
有沒有人自己寫或有什麼好的建議?
可能重複(http://stackoverflow.com/questions/2297056/pretty-urls-in -google-app-engine-url-rewriting) – ceejayoz 2010-05-26 20:44:16
不幸的是沒有。我的問題是關於如何正確存儲和獲取數據,而不是如何獲取網址。 – fredrik 2010-05-26 21:01:22
這裏的目標究竟是什麼?如果您只是直接進行查詢,那麼爲什麼不把關鍵名稱作爲URL路徑呢? – 2010-05-26 21:49:41