【问题标题】:Layout bug with my templates我的模板的布局错误
【发布时间】:2012-02-07 11:57:49
【问题描述】:

在我为特定应用程序的所有模板渲染中,输出以 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 的来源?它可能不是来自模板,似乎也不是来自处理程序,也没有其他代码。

谢谢

【问题讨论】:

  • 尝试将self.render_template('/', {})更改为self.render_template('/', {'user':user}),看看它是否仍然附加None

标签: python html google-app-engine template-engine python-2.7


【解决方案1】:

Objectives.get() 中,您必须返回一个值。由于您不这样做,Python 假定结果是None。这个值是你在调用基本dispatch 实现时在NewBaseHandler.dispatch() 中获得的,然后将其写入响应。

如果我让您的应用在get 方法中正确返回空字符串将解决问题。

【讨论】:

  • 它可以返回空字符串。我想我必须了解调度函数的作用,因为我只是从某个地方获取它。非常感谢您在解决方法上节省了我宝贵的时间。
猜你喜欢
  • 2017-08-28
  • 2019-03-01
  • 1970-01-01
  • 2018-01-03
  • 1970-01-01
  • 2016-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多