Pregunta

En toda mi representación de plantilla para una aplicación en particular, la salida termina con None:

...</html>None

Esto debe ser un error y probablemente en mi código y he pasado días tratando de rastrearlo. No hay nada especial en mi aplicación y este error aparece en cada página que utilizo la representación de plantillas, ya sea que uso un motor de plantilla separada o no. No hay nada especial en mi código:

    class Objectives(NewBaseHandler):

        @user_required
        def get(self):
            user = auth_models.User.get_by_id(long(self.auth.get_user_by_session()['user_id']))
            if user:
                self.render_template('objectives.html', {'user': user})
            else:

                self.render_template('/', {})

class NewBaseHandler(BaseHandler):

    """
........BaseHandler for all requests

........Holds the auth and session properties so they are reachable for all requests
...."""

    def dispatch(self):
        """
............Save the sessions for preservation across requests
........"""

        # self.session_store = sessions.get_store(request=self.request)
        # if self.request.host.find('localhost') > 0:  # for a Swedish domain that uses Swedish
        # or lang = os.environ.get("HTTP_ACCEPT_LANGUAGE")

        i18n.get_i18n().set_locale('sv')
        lang_code_get = self.request.get('hl', None)
        if lang_code_get:
           #self.session['i18n_language'] = lang_code_get
           i18n.get_i18n().set_locale(lang_code_get)
        try:
            response = super(NewBaseHandler, self).dispatch()
            self.response.write(response)
        finally:
            self.session_store.save_sessions(self.response)

    @webapp2.cached_property
    def auth(self):
        return auth.get_auth()

    @webapp2.cached_property
    def session_store(self):
        return sessions.get_store(request=self.request)

    @webapp2.cached_property
    def auth_config(self):
        """
............Dict to hold urls for login/logout
........"""

        return {'login_url': self.uri_for('login'),
                'logout_url': self.uri_for('logout')}

class BaseHandler(webapp2.RequestHandler):

    @webapp2.cached_property
    def jinja2(self):
        return jinja2.get_jinja2(app=self.app)

    def render_template(self, file, template_args):
        path = os.path.join(os.path.dirname(__file__), 'templates',
                            file)
        self.response.out.write(template.render(path, template_args))

    def render_jinja(self, filename, **template_args):
        self.response.write(self.jinja2.render_template(filename,
                            **template_args))

¿Cómo puedo comprobar dónde la salida None ¿Viene de? Probablemente no provenga de la plantilla y no parece provenir de los manejadores y no hay otro código.

Gracias

¿Fue útil?

Solución

En Objectives.get() Debe devolver un valor. Dado que no haces esto, Python asume que el resultado es None. Este valor que obtienes NewBaseHandler.dispatch() Al llamar a la base dispatch Implementación y luego escríbelo a la respuesta.

Si obtengo su aplicación, devuelve correctamente la cadena vacía en get El método resolverá el problema.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top