2012-01-11 37 views
0

在所有我的模板呈现为特定的应用程序布局错误,输出与None结束:我的模板

...</html>None 

这必须是可能在我的代码中的错误,并和我花了几天试图跟踪它下降。没有什么特别的关于我的应用程序,并且这个错误出现在我使用模板渲染的每个页面上,无论是否使用单独的模板引擎。没有什么特别的我的代码:

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)) 

如何检查其中输出None是从哪里来的?它可能不是来自模板,它似乎不是来自处理程序,也没有其他代码。

谢谢

+1

尝试将'self.render_template('/',{})'改为'self.render_template('/',{'user':user})'并查看它是否仍然附加无 – DTing 2012-01-11 04:40:50

回答

1

Objectives.get()你必须返回一个值。既然你不这样做,Python假定结果是None。在调用基地dispatch执行时,在NewBaseHandler.dispatch()中获得此值,然后将其写入响应。

如果我的应用程序正确返回空字符串get方法将解决问题。

+0

它的工作原理是返回空串。我想我必须知道调度函数的作用,因为我只是从某个地方把它调出来。非常感谢您使用解决方法为我节省宝贵的时间。 – 2012-01-11 11:43:13