gpt4 book ai didi

python - 属性错误 : '' object has no attribute 'request'

转载 作者:行者123 更新时间:2023-11-28 23:02:54 25 4
gpt4 key购买 nike

我定义了一个渲染页面的方法:

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

此外,我还有这些类(class):

组处理器

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 收到对 URL/nuevogrupo 的 HTTP GET 请求时,它会实例化 NuevoGrupoHandler 类并调用该实例的 get 方法。所以在这一点上,一切都按预期进行

def main():
application = webapp.WSGIApplication([
('/nuevogrupo', NuevoGrupoHandler),
etc...

但是当我从 NuevoGrupoHandler.post() 调用方法 GruposHandler.obtenerPagina() 时,当 obtenerPagina() 中的方法 doRender()到达,在这一行抛出异常:

newval['path'] = handler.request.path

这是我得到的堆栈跟踪:

AttributeError: 'GruposHandler' object has no attribute 'request'

因此,当未从 webapp.WSGIApplication 实例调用时,似乎某些设置不正确。我不太确定。

抱歉,我无法更好地解释问题。

我应该怎么做才能避免该异常。

提前致谢。

最佳答案

我不知道 google-app-engine,但问题出在你这边,而不是 WSGIApplication。

NuevoGrupoHandler.post 方法中,您实例化了一个用于渲染的新 GruposHandler()。并且此实例没有导致异常的 request 属性。

我的方法是将请求属性从当前实例复制到新实例:

grupoHandler = GruposHandler()
grupoHandler.request = self.request # <<< add this
grupoHandler.response = self.response # <<< and this
grupoHandler.obtenerPagina("gruposMios", 'Informacion: un nuevo grupo fue agregado.')

然后您的新实例处理程序将具有与当前实例相同的请求,并且将避免异常。

编辑:

顺便说一下,如果你只想使用这样的外部方法,最好创建另一个实现 doRender 的基类,并从它继承 GruposHandlerNuevoGrupoHandler:

class RenderRequestHandler(webapp.RequestHandler):
def obtenerPagina(self, ...):
pass

def do_render(self):
pass

class GruposHandler(RenderRequestHandler):
pass

class NuevoGrupoHandler(RenderRequestHandler):
pass

并在基类中实现这两个方法。 :)

关于python - 属性错误 : '<Class name>' object has no attribute 'request' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9249086/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com