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