我正尝试在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