Python 谷歌应用引擎中的友好URL

Python 谷歌应用引擎中的友好URL,python,google-app-engine,friendly-url,Python,Google App Engine,Friendly Url,我正在尝试用GAE和Python构建一个友好的URL查找方法。有人这样做过吗 我让它工作了,但感觉很不稳定。它的工作原理是,它采用路径(比如/foo/bar/)并将其拆分为一个列表。获取列表中的最后一个元素,并在数据库中查询匹配项。现在有点头疼了 如果有多个“条”,因为可能有另一个“条”,但在不同的页面下,如何区分它们?到目前为止,我的解决方案是迭代“bar”的结果,并查看其父页面的引用属性。父“foo”也可能出现多次,因此现在我们必须迭代该事件。不难看出,这种云可以轻松地添加大量for循环 更

我正在尝试用GAE和Python构建一个友好的URL查找方法。有人这样做过吗

我让它工作了,但感觉很不稳定。它的工作原理是,它采用路径(比如/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列表中最后一项匹配的所有内容。迭代它并获取所有父对象并尝试匹配它

到目前为止,它只适用于一个根页面和一个子页面。 我不知道如何使它更具动态性并支持多个级别

有人写了自己的或有什么好的建议吗?

查看关于url映射的部分

这是完整的代码,但我希望你能理解

这是我的请求处理程序parama=我的第一个param,paramb=我的第二个param 类testPath(webapp.RequestHandler): def get(self、parama、paramb):#注意两个额外的参数,而不仅仅是self self.response.out.write(parama) self.response.out.write(paramb)

#下面您可以看到我映射了请求的任何内容/test//注意“urlmapping”前面的“r”

application=webapp.WSGIApplication([ (r'/test/(.)/(.),testPath), ('/logout',LogoutHandler) ], debug=True)

所以当我去‘myapp.com/test/fruits/green’的时候

帕拉玛=水果 paramb=绿色


:D

这就是你要找的吗

而不是你可以


不幸的是,不可能。我的问题更多的是关于如何正确存储和获取数据,而不是如何获取url。这里的目标是什么?如果你只是在直接查找,为什么不将密钥名作为url路径?@Nick:你能解释一下你的意思吗?我想做的是将url段映射到数据存储中的一个页面。由于URL段不是唯一的,因此我不知道如何在不使用大量for循环的情况下获取作为URL一部分的所有页面。
class BrowseHandler(webapp.RequestHandler):

def get(self, category, product_id):
    # Display product with given ID in the given category.


# Map URLs like /browse/(category)/(product_id) to BrowseHandler.
application = webapp.WSGIApplication([(r'/browse/(.*)/(.*)', BrowseHandler)
                                 ],
                                 debug=True)

def main():
    run_wsgi_app(application)

if __name__ == '__main__':
    main()