【问题标题】:Basic html-mapping or url-rewriting for google appengine (python)google appengine (python) 的基本 html 映射或 url 重写
【发布时间】:2012-05-04 15:09:28
【问题描述】:

我正在尝试重写 Google Appengine 上静态网站的网址。 我只想要 http://www.abc.com/abouthttp://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()

【问题讨论】:

  • 不工作如何?会发生什么,您预计会发生什么?

标签: python google-app-engine url-rewriting url-routing friendly-url


【解决方案1】:

对于你的构造函数,你想要:

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

这意味着无论何时有人访问http://www.abc.com/about/,他们都会被“路由”到您的 About 处理程序。

然后你必须创建一个 About 处理程序。

class About(webapp.RequestHandler):
  def get(self):
    self.response.out.write(template.render('about.html', None))

我不熟悉您的编码风格,但我向您展示的内容在我所有的项目中都对我有用。

【讨论】:

  • 不要将应用程序定义放在 main 中 - 将其放在外面。这样,它只定义一次,您可以轻松地将您的应用程序转换为在 Python 2.7 运行时上运行。此外,您的第一个 sn-p 中的缩进是错误的。
  • 如何将应用程序定义放在主程序之外?修复了缩进问题,谢谢!
  • 非常感谢 mrmo123,工作就像一个魅力! @nick,我使用的是 2.7,如何将应用程序定义放在主程序之外?谢谢
  • 没问题!需要记住的一点:如果您希望 abc.com/about/123abc.com/about/foo 路由到 about.html,只需将 ('/about/', About) 更改为 ('/about/.*', About)。你明白了。
  • @mrmo123 是的,我在两天前才开始使用 python。需要一个我可以构建的快速启动(一个基本的工作代码),明白了! :D
猜你喜欢
  • 2012-08-11
  • 2018-07-21
  • 2012-02-15
  • 2013-02-10
  • 1970-01-01
  • 1970-01-01
  • 2014-06-02
  • 2016-08-30
  • 1970-01-01
相关资源
最近更新 更多