Pythonを使用したWebappでGAE、Google App Engineを使用しています。
カスタム エラー ハンドラ、テンプレート、またはそれらの線に沿って実装しようとしています。GAE はここにいくつかのドキュメントを提供していますが、実装の例では十分ではありません (私にとって)。
また、別の StackOverflow の質問でこれらすべての素晴らしい例を見てきましたが、現在のmain.pyファイルに実装する方法を理解できません。
import os
from google.appengine.ext import webapp
from google.appengine.ext.webapp import util
from google.appengine.ext.webapp import template
class MainHandler(webapp.RequestHandler):
def get (self, q):
if q is None:
q = 'static/index.html'
path = os.path.join (os.path.dirname (__file__), q)
self.response.headers ['Content-Type'] = 'text/html'
self.response.out.write (template.render (path, {}))
def main ():
application = webapp.WSGIApplication ([('/(.*html)?', MainHandler)], debug=False)
util.run_wsgi_app (application)
if __name__ == '__main__':
main ()
MainHandler
別のクラスを作成して、の前と新しいのに実装しようとしdef
ましたMainHandler
。404 が表示されたのは、グローバルに表示されたときだけでした。つまり、index.html
ファイルでさえ「404」でした。
私が最後に試したのは、次の行に沿って何かを実装することでした:
if not os.path.exists (_file_):
self.redirect(/static/error/404.html)
私のapp.yamlファイルは次のとおりです。
application: appname
version: 1
runtime: python
api_version: 1
error_handlers:
- file: static/error/404.html
- error_code: over_quota
file: static/error/404.html
handlers:
- url: /(.*\.(gif|png|jpg|ico|js|css))
static_files: \1
upload: (.*\.(gif|png|jpg|ico|js|css))
- url: /robots.txt
static_files: robots.txt
upload: robots.txt
- url: /favicon.ico
static_files: favicon.ico
upload: favicon.ico
- url: .*
script: main.py
404 ハンドラーの実装に関するガイド/チュートリアルは見つかりません。コードの抜粋だけです。
皆さん、どうもありがとうございました!
編集:以下のハンスからの説明によると、ファイル (またはディレクトリ) がファイルシステムに存在しない場合、404 を返したいと考えています。
私はもう試した:
class ErrorHandler(webapp.RequestHandler):
def get(self):
if not os.path.isfile(_file_):
self.redirect('/static/error/404.html')
無駄に。正しい実装/構文は何ですか?
編集:ヴォスカサへ
import os
from google.appengine.ext import webapp
from google.appengine.ext.webapp import util
from google.appengine.ext.webapp import template
import logging
import webapp2
def handle_404(request, response, exception):
logging.exception(exception)
response.write('Oops! I could swear this page was here!')
response.set_status(404)
def handle_500(request, response, exception):
logging.exception(exception)
response.write('A server error occurred!')
response.set_status(500)
app = webapp2.WSGIApplication([
webapp2.Route('/', handler='handlers.HomeHandler', name='home')
])
app.error_handlers[404] = handle_404
app.error_handlers[500] = handle_500
class MainHandler(webapp.RequestHandler):
def get (self, q):
if q is None:
q = 'static/index.html'
path = os.path.join (os.path.dirname (__file__), q)
self.response.headers ['Content-Type'] = 'text/html'
self.response.out.write (template.render (path, {}))
def main ():
application = webapp.WSGIApplication ([('/(.*html)?', MainHandler)], debug=True)
util.run_wsgi_app (application)
if __name__ == '__main__':
main ()