Ну, вы можете автоматически добавить переменную в базовый контроллер в /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