python - Google App Engine 中的友好 URL

标签 python google-app-engine friendly-url

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

相关文章:

python - 在Python中自定义散点图的气泡大小

google-app-engine - Google appengine,运行繁重的数据存储写入cron作业的最便宜的方式?

php - Nginx Laravel 4 url​​ 查询重写

.htaccess - .htaccess 中的 SEO 友好 URL 命令

python - sqlalchemy:使用装饰器为多个函数提供线程安全 session

php - Python无法连接MySQL

python - 评估到同一日期的两个不同周数

python - 通过Key检索GAME数据

python - 使用数据存储区在 App Engine 上实现 "Find Friends by phone number"功能

mysql - 处理带有非英文字符的 SEO 友好 URL