Более чистый способ получения имени пользователя в пилонах с помощью repoze.name - PullRequest
0 голосов
/ 17 апреля 2010

в шаблоне мако, я использую это

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

и рендер в контроллере:

render('file.html')

я могу написать это лучше, не передавая параметр каждый раз?

1 Ответ

2 голосов
/ 17 апреля 2010

Ну, вы можете автоматически добавить переменную в базовый контроллер в /lib/base.py. Это добавит его к каждому контроллеру в вашем приложении пилонов автоматически. Я использую repoze. что и что я делаю в base.py я положил:

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

И это всего лишь вспомогательная функция, которую я написал в auth lib. 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
...