小编bry*_*yon的帖子

模板中的龙卷风渲染参数

我觉得我把它变成了龙卷风,而且它的状态很差。目标是将错误消息放入模板中。此错误消息只需要在一个处理程序中(负责同一页面)。

模板行:

{% if errormsg is not None %}
<div class="alert-warning">{{ errormsg }}</div>
{% end %}
Run Code Online (Sandbox Code Playgroud)

相关的处理程序部分:

if auth:
  self.set_current_user(username)
  self.redirect(self.get_argument("next",u"/"))
else:
  self.errormsg = "Login Failed"
  self.render("login.html", errormsg=self.errormsg)
Run Code Online (Sandbox Code Playgroud)

此时,当 errormsg 未设置为某些内容时,我在页面上收到全局命名空间错误消息。

NameError: global name 'errormsg' is not defined
Run Code Online (Sandbox Code Playgroud)

我发现的解决方法是在我的 BaseHandler 中使用全局渲染函数(我不喜欢这一点):

def render(self, template, **kwargs):
  if hasattr(self, 'errormsg'):
    kwargs['errormsg'] = self.errormsg
  else:
    kwargs['errormsg'] = None
  super(BaseHandler, self).render(template, **kwargs)
Run Code Online (Sandbox Code Playgroud)

这基本上现在将 errormsg 添加到每个渲染中。有没有正确的方法来做到这一点,不会与全局渲染功能混淆?

谢谢!


编辑:

因为我实际上试图做的是将不同/多个非标准 kwargs 参数传递给继承的处理程序,所以我实际上真的认为我正在寻找一种更好的方法来测试,在这种情况下,是在模板上下文中的 errormsg。

{% if 'errormsg' in globals() %}
Run Code Online (Sandbox Code Playgroud)

这仍然感觉很糟糕,因为这个问题是第一次在使用龙卷风时实际出现全局变量。

我确实喜欢扩展渲染来为所有继承的处理程序设置 kwargs 默认值(它实际上是做什么的)。我认为这也可能类似于 self.current_user 的工作方式。

python tornado

3
推荐指数
1
解决办法
3456
查看次数

标签 统计

python ×1

tornado ×1