Я использую среду webapp2 в Google App Engine, и у меня возникает основная ошибка в одном из моих обработчиков запросов.Ошибка в развернутом GAE RequestHandler с использованием Webapp2
приложение работает нормально в локальном экземпляре, но вызывает следующий отслеживающий на развернутой версии Google App Engine:
Вот код:
import os
from google.appengine.ext.webapp import template
import webapp2
import logging
class MainHandler(webapp2.RequestHandler):
def get(self):
logging.info('hi there 34')
template_values = {}
self.response.out.write('hello world 4')
path = os.path.join(os.path.dirname(__file__), 'index.html')
## This is the code that causes the bug ##
self.response.out.write(template.render(path, template_values))
## ## ## ##
debug = os.environ.get('SERVER_SOFTWARE', '').startswith('Dev')
app = webapp2.WSGIApplication(
[(r'/main', MainHandler)],
debug = debug)
def main():
app.run()
ошибка отслеживающий:
Traceback (most recent call last):
File "/base/python27_runtime/python27_dist/lib/python2.7/wsgiref/handlers.py",
line 86, in run
self.finish_response()
File "/base/python27_runtime/python27_dist/lib/python2.7/wsgiref/handlers.py",
line 127, in finish_response
self.write(data)
File "/base/python27_runtime/python27_dist/lib/python2.7/wsgiref/handlers.py",
line 202, in write
assert type(data) is StringType,"write() argument must be string"
AssertionError: write() argument must be string
Что означает эта ошибка?
Спасибо за ответ. Обычно с GAE мне никогда не приходилось кодировать в utf-8. Однако ваш ответ заставил меня подумать о файле html, который отображается для ответа. Мой редактор кода автоматически вставил html-разметку, чтобы html в utf-8. И это был первый раз, когда эта разметка была в html-файле, и в первый раз я вижу эту конкретную ошибку. Но, увы, такая же ошибка повторяется с этой разметкой или нет. И путем кодирования, как вы предполагали, и без него. Однако я подтвердил ваш ответ, потому что я думаю, что это была хорошая догадка, которая может принести пользу другим. Любые другие идеи? –
Я только что повторил это, выставив отображаемое значение шаблона в строку, и он работал нормально. Не уверен, однако, в чем причина, так как это первый раз, когда я должен был это сделать. Как правило, в моих предыдущих приложениях, а также во всех примерах в документах GAE, template.render (путь, значения) работает так, как есть. Еще раз спасибо за указание на направление кодирования текста! –
Jinja2 не поддерживает utf-8 bytestrings. 'Template.render' всегда возвращает строку unicode. Если вы передаете строку un unicode с символами non ascii в шаблон jinja, вы получите ошибки в Юникоде. – Ski