使用repoze.name在清管器中获取用户名的更清洁方法

时间:2010-04-16 20:55:54

标签: python pylons

在mako模板中,我用这个

${request.environ['repoze.who.identity']['user']}

和控制器中的渲染:

render('file.html')

我可以更好地写这个而不必每次传递参数吗?

1 个答案:

答案 0 :(得分:2)

好吧,您可以在/lib/base.py中的基本控制器中自动添加varible。这将自动将其添加到您的pylons应用程序中的每个控制器。我正在使用repoze.what和我所做的是在base.py我把:

# if there's no user set, just setup a blank instance
c.current_user = auth.get_user(User()) 

这只是我写入auth lib的一个convienence函数。 User()是User模型的空白实例,因此模板具有某些功能,并且不会引发无效的键错误。

def get_user(default):
    """Return the user object from the `repoze.who` Metadata Plugin

    :param default: default item to send back if user not logged in

    Since we might not be logged in and template choke on trying to output
    None/empty data we can pass in a blank User object to get back as a default
    and the templates should work ok with default empty values on that

    """
    if 'repoze.who.identity' in request.environ:
        return request.environ['repoze.who.identity']['user']
    else:
        return default