2010-04-16 3 views
0

과 철탑에 사용자 이름을 얻기 위해, 나는이클리너 방법은 마코 템플릿에 repoze.name

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

사용하고 컨트롤러에서 렌더링 :

render('file.html') 

내가 전달하지 않고 더 나은을 쓸 수 있습니다 매개 변수는 매번?

답변

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()) 

을 그리고 그게 내가 인증 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 
+0

감사합니다. 로그인 할 때 세션에 넣었습니다. – Timmy

관련 문제