я определил метод рендеринга страниц:AttributeError: '<Class name>' объект не имеет атрибута 'запрос'
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 и вызывает метод получения экземпляра. Таким образом, в данный момент, все работает, как ожидалось
def main():
application = webapp.WSGIApplication([
('/nuevogrupo', NuevoGrupoHandler),
etc...
, но когда я вызываю метод GruposHandler.obtenerPagina() из NuevoGrupoHandler.post(), когда метод doRender() внутри obtenerPagina() достигается, исключение отбрасывается на этой линии:
newval['path'] = handler.request.path
Это StackTrace я получаю:
AttributeError: 'GruposHandler' object has no attribute 'request'
Таким образом, кажется, что-то неправильно настроен, если он не вызывается из экземпляра webapp.WSGIApplication. Я не совсем уверен.
Извините, я не мог объяснить проблему лучше.
Что мне делать, чтобы избежать этого исключения.
Заранее спасибо.
Is doRender() метод экземпляра вашего GruposHandler? – alex
Привет, Алекс.doRender() не принадлежит ни одному классу. Это просто внутри файла, который содержит другие классы. – Lucas