谷歌应用引擎(Python)的基本HTML映射或URL重写

3

我正在尝试为Google Appengine上的静态网站重写url。 我只想让http://www.abc.com/about对应http://www.abc.com/about.html 我不需要像abc.com/page?=1之类的东西进行重写。 我只想弄清楚如何显式地重写html页面的url。

我目前正在使用的代码(无效) -

from google.appengine.ext import webapp
from google.appengine.ext.webapp import util
from google.appengine.ext.webapp import template
import os

class MainHandler(webapp.RequestHandler):
    def get(self):
        template_values = {}

        path = os.path.join(os.path.dirname(__file__), 'index.html')
        self.response.out.write(template.render(path, template_values))


class PostHandler(webapp.RequestHandler):
    def get(self, slug):
        template_values = {}
        post_list =  { 
            'home' : 'index.html',
            'portfolio' : 'portfolio.html',            
            'contact' : 'contact.html',
            'about' : 'about.html'
        }

        if slug in post_list:
            self.response.out.write('Slugs not handled by C-Dan yet')
        else:
            self.response.out.write('no post with this slug')

def main():
    application = webapp.WSGIApplication([('/', MainHandler),('/(.*)', PostHandler)], debug=True)
    util.run_wsgi_app(application)

if __name__ == '__main__':
    main()

出了什么问题?发生了什么事情,你原本期望会发生什么? - Nick Johnson
1个回答

4

对于您的构造函数,您需要:

def main():
  application = webapp.WSGIApplication([
    ('/', MainHandler),
    ('/portfolio/', Portfolio),
    ('/contact/', Contant),
    ('/about/', About)
    ])
  util.run_wsgi_app(application)

这意味着每当有人访问http://www.abc.com/about/时,他们将被“路由”到您的“关于我们”处理程序。然后,您需要创建一个“关于我们”处理程序。
class About(webapp.RequestHandler):
  def get(self):
    self.response.out.write(template.render('about.html', None))

我不熟悉你的编码风格,但是我展示给你的内容在我所有的项目中都奏效了。


1
不要将应用程序定义放在main函数内部,而是将其放在外面。这样,它只被定义一次,而且你可以很容易地将你的应用程序转换为在Python 2.7上运行。另外,你的第一个片段中缩进是错误的。 - Nick Johnson
你会如何将应用程序定义放在主函数之外? 已经修复了缩进问题,谢谢! - mrmo123
非常感谢mrmo123,这个方法很有效!@nick,我正在使用2.7版本,如何将应用程序定义放在主函数之外?谢谢。 - Chi Voyage Art
没问题!需要记住的是:如果你想让 http://www.abc.com/about/123 或者 http://www.abc.com/about/foo 路由到 about.html,只需将 ('/about/', About) 改为 ('/about/.*', About)。你懂的。 - mrmo123
@mrmo123 是的,我才开始接触Python两天。需要一个起点(一个基本的、可工作的代码片段),以便我可以在此基础上进行开发,我找到了!:D - Chi Voyage Art

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接