在AppEngine中使用命名路由的最佳做法是什么?

时间:2012-09-19 07:31:30

标签: google-app-engine

在app.yaml文件中,我添加了两行来指定url映射:

  • url:/blog/.* 脚本:blog.app

  • 网址:/ 脚本:home.app

问题是我不能使用“uri_for”函数在home.py中为博客模块生成一个url,如果在home moudle中没有添加Route:

这是家庭模块中的代码:

    app = webapp2.WSGIApplication([
       webapp2.Route(r'/', handler=HomeHandler, name='home')
    ], debug = SITE_CONFIG['is_debug'], config=SITE_CONFIG)

和blog.py中的代码:

    app = webapp2.WSGIApplication([
    webapp2.Route(r'/blog/<blog_id:\d+>', handler=BlogHandler,    name="blog")
    ], debug = SITE_CONFIG['is_debug'], config=SITE_CONFIG)

所以,如果我在home.html中有这样的代码:{{uri_for('blog',blog_id = blabla)}},它就无法工作。

1 个答案:

答案 0 :(得分:1)

您应该将这些路线合并到一个应用中。

app = webapp2.WSGIApplication([
       webapp2.Route(r'/', handler=HomeHandler, name='home'),
       webapp2.Route(r'/blog/<blog_id:\d+>', handler=BlogHandler, name="blog")
    ], debug = SITE_CONFIG['is_debug'], config=SITE_CONFIG)

实际上那些只是视图博客帖子路线。

如果您想要完整的CRUD应用,可能需要添加更多。

app = webapp2.WSGIApplication([
        webapp2.Route(r'/admin/blog', handler='admin.AdminBlogHandler:list, name="admin.blog.list"),
        webapp2.Route(r'/admin/blog/new', handler='admin.AdminBlogHandler:new', name='admin.blog.edit'),
        webapp2.Route(r'/admin/blog/<id:[^/]+>/edit', handler='admin.AdminBlogHandler:edit', name='admin.blog.edit'),
        webapp2.Route(r'/admin/blog/<id:[^/]+>', handler='admin.AdminBlogHandler:view', name='admin.blog.view')
    ], debug = SITE_CONFIG['is_debug'], config=SITE_CONFIG)

请注意以下示例:

1)您为一个名称添加前缀以从另一个文件加载处理程序(admin.AdminBlogHandler将在'admin.py'中查找'class AdminBlogHandler'

2)指定在冒号后的处理程序名称之后运行的方法。

3)在每种方法中,我都在为get和post创建功能,因此没有用于编辑和更新的离散RESTful URL。