2009-08-29 6 views
0

사용자를 인수로 취하는 사용자 정의 필터 user_tz가 있습니다. 그것은 어디서나 잘 작동하지만, regroup 태그에서이 필터를 사용하려고 시도했을 때 사용자가 존재하지 않는다고 말하는 데 실패합니다. Django 재편성 태그 문제

코드 :

{created_on에 의해 %의 재 그룹 proj_messages.object_list | user_tz : proj_message_list %의 같은 사용자}

이 내가 점점 오전 오류입니다 : 렌더링하는 동안 예외가 겁에 질린이 : 키 실패 조회 [사용자] u "오늘의 작업".

감사합니다, 마수드 아메드

답변

0

은 이상하게도 나는이 exactissue을 가로 질러왔다. 나중에 코드를 변경해야했지만 솔루션을 사용할 수 없었습니다. 분명히 다음과 같은 일이 일어납니다.

템플릿에 쓰는 것은 무엇이든 노드, 변수 등으로 분할됩니다. 렌더링시 변수가 해당 인스턴스에서 사용할 수있는 컨텍스트에서 검색됩니다. 그리고 regroup 태그의 경우 사용할 수있는 컨텍스트는 object_list이며 첫 번째 인수로 전달했습니다. 전체 템플릿에 대해 전역 인 일반 컨텍스트 (사용자의 경우 '사용자'포함)가 아닙니다. 그래서 지정한 다른 변수를 찾을 수 없습니다. object_list이 아닙니다.

따라서, 귀하의 경우, 재편성 할 수있는 컨텍스트는 proj_messages.object_list의 개체입니다. 따라서 해결 프로그램 코드는 created_on 변수를 찾을 수 있지만 user 변수는 찾을 수 없습니다. 이것이 바로 템플릿 예외를 던지는 것입니다.

이것을 생각하면 object_list에도 user 속성이있는 경우 어떻게 될까요? 이 경우 KeyError가 전혀 나타나지 않지만 이지만user이 필터로 전달되면 전달하려는 user 변수가 아닐 수 있습니다. 요청에

편집 : 재 그룹 태그 필터의 이러한 사용에 user을 통과, 직접적인 방법이있다. 그러나 일종의 해킹이 분명히 효과적 일 것입니다. 참고, 그냥 해킹. proj_messages.object_list의 개별 개체/개체에보기에서 해당 사용자 변수를 포함 시키거나 템플릿의 object_list에 추가 필터를 사용하도록 만듭니다. 하지만 그보다 나은 점은 어디서나 user을 사용할 수있게하려면 컨텍스트 외부에서 다른 해킹을 고려해 보시기 바랍니다. 체크 아웃 : http://code.djangoproject.com/wiki/CookBookThreadlocalsAndUser.

+0

내 필터에 사용자 변수를 전달할 수있는 방법이 있습니까? –