我正在尝试在 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 列表中的最后一项匹配的所有内容。迭代它并获取所有父级并尝试匹配它。
到目前为止,它只适用于一个根页面和一个子页面。 我不知道如何让它更动态并支持多个级别。
有没有人自己写过或者有什么好的建议?
最佳答案
http://code.google.com/appengine/docs/python/tools/webapp/running.html#URL_Mappings
查看说 url 映射的部分
这是完整的代码,但我希望你明白了
这是我的请求处理程序 parama = 我的第一个参数,paramb = 我的第二个参数
类测试路径(webapp.RequestHandler): def get(self,parama,paramb): # 注意两个额外的参数,不仅仅是 self self.response.out.write(参数) self.response.out.write(参数)
.... # 下面你看到我映射了任何请求 "/test// 注意 'urlmapping' 之前的 "r"
application = webapp.WSGIApplication([ (r'/test/(.)/(.)', testPath), ('/注销', LogoutHandler) ], 调试=真)
所以当我访问“myapp.com/test/fruits/green”时
parama = 水果 参数 = 绿色
:D
关于python - Google App Engine 中的友好 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2916624/