Layout -Fehler mit meinen Vorlagen
-
26-10-2019 - |
Frage
Bei all meiner Vorlagenwiedergabe für eine bestimmte App endet die Ausgabe mit None
:
...</html>None
Dies muss ein Fehler und wahrscheinlich in meinem Code sein, und ich habe Tage damit verbracht, ihn aufzuspüren. Meine App hat nichts Besonderes, und dieser Fehler wird auf jeder Seite angezeigt, die ich mit Vorlagenrendern verwendet habe, unabhängig davon, ob ich eine separate Vorlage -Engine verwende oder nicht. Mein Code hat nichts Besonderes:
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))
Wie kann ich prüfen, wo die Ausgabe? None
kommt von? Es kommt wahrscheinlich nicht aus der Vorlage und scheint nicht von den Handlern zu kommen und es gibt keinen anderen Code.
Vielen Dank
Lösung
Im Objectives.get()
Sie müssen einen Wert zurückgeben. Da Sie dies nicht tun, nimmt Python an, dass das Ergebnis ist None
. Dieser Wert, den Sie erhalten NewBaseHandler.dispatch()
Wenn Sie zur Basis anrufen dispatch
Implementierung und schreiben Sie es dann auf die Antwort.
Wenn ich Ihre App korrekt in die leere Zeichenfolge zurückbringe get
Die Methode löst das Problem.