Я определил метод для рендеринга страниц:
def doRender(handler, tname='index.html',values = {}):
temp = os.path.join(os.path.dirname(__file__),
'templates/'+tname)
if not os.path.isfile(temp):
return False
newval = dict(values)
newval['path'] = handler.request.path
user = users.get_current_user()
url = users.create_login_url(handler.request.uri)
url_linktext = 'Login'
if user:
url = users.create_logout_url(handler.request.uri)
url_linktext = 'Logout'
newval['user'] = user
newval['url'] = url
newval['url_linktext'] = url_linktext
outstr = template.render(temp, newval)
handler.response.out.write(outstr)
return True
Также у меня есть эти классы:
GruposHandler
class GruposHandler(webapp.RequestHandler):
def get(self):
self.obtenerPagina()
def obtenerPagina(self, pOpcion = None, pMensajeInformacion = None):
opcion = pOpcion if pOpcion is not None else self.request.get('opcion')
usuario = obtenerUsuario()
rsGrupos = obtenerGruposAll()
listaGruposCreadosPorUsuario = []
#
#
for grupo in rsGrupos:
if grupo.creadoPorUsuario == usuario:
listaGruposCreadosPorUsuario.append(grupo)
blahh...
if opcion == 'gruposMios':
doRender(self, 'grupos_mios.html', {'listaGruposCreadosPorUsuario':listaGruposCreadosPorUsuario,
'informacion':pMensajeInformacion})
NuevoGrupoHandler
class NuevoGrupoHandler(webapp.RequestHandler):
def post(self):
nombre = self.request.get('nombre')
descripcion = self.request.get('descripcion')
#comprobar que no exista un grupo con el mismo nombre
obj = Grupo.get_by_key_name(nombre)
if obj:
doRender(self, 'nuevo_grupo.html', {'mensaje_descripcion':'Ya existe un grupo con ese nombre.'})
else:
grupo = model.Grupo(key_name = nombre, nombre=nombre, descripcion = descripcion);
grupo.put()
grupoHandler = GruposHandler()
grupoHandler.obtenerPagina("gruposMios", 'Informacion: un nuevo grupo fue agregado.')
Когда webapp получает HTTP-запрос GET к URL / nuevogrupo, он создает экземпляр класса NuevoGrupoHandler и вызывает метод get экземпляра.
Так что на данный момент все работает как положено
def main():
application = webapp.WSGIApplication([
('/nuevogrupo', NuevoGrupoHandler),
etc...
но когда я вызываю метод GruposHandler.obtenerPagina () из NuevoGrupoHandler.post (), когда метод doRender () находится внутри obtenerPagina ()
Достигнуто исключение в этой строке:
newval['path'] = handler.request.path
Это трассировка стека, которую я получаю:
AttributeError: объект 'GruposHandler' не имеет атрибута 'request'
Так что, похоже, что-то не правильно установлено, когда оно не вызывается из экземпляра webapp.WSGIApplication. Я не так уверен.
Извините, я не мог объяснить проблему лучше.
Что я должен сделать, чтобы избежать этого исключения.
Заранее спасибо.