Как ни странно, даже я наткнулся на эту exactissue. Хотя позже мне пришлось изменить свой код, я не мог решить его. Видимо, что происходит, это что-то вроде следующего.
Все, что вы пишете в шаблонах, разделяется как узлы, переменные и т. Д. Переменные во время рендеринга просматриваются в контексте, доступном этому экземпляру. И обратите внимание, что для тегов regroup
контекст доступен, это только object_list
, который вы передали в качестве первого аргумента. Не обычный контекст (который содержит «пользователь» в вашем случае), который является глобальным для всего шаблона. Таким образом, он не может найти другую указанную вами переменную, которой нет у вас object_list
.
Таким образом, в вашем случае контекст, доступный для перегруппировки, представляет собой объект от proj_messages.object_list
. И поэтому код распознавателя может найти переменную created_on
в контексте, но не user
. И это то, что бросает здесь исключение шаблона.
Учитывая это, представьте себе, что произойдет, если ваш object_list
тоже имел атрибут user
. В этом случае не будет никакого KeyError, , ноuser
передано фильтру, не было бы вовсе не переменной user
, которую вы собирались передать.
Редактировать по запросу: Существует не прямой путь, чтобы передать user
на такое использование фильтра в перегруппировать тег. Но какой-то хак, очевидно, сработает. Заметьте, это просто взломать. Сделайте каждый отдельный объект/объект proj_messages.object_list
, чтобы содержать эту пользовательскую переменную из представления или используя дополнительный фильтр в объекте-списке из шаблона. Но лучше, если вы хотите, чтобы user
был доступен в любом месте, вне контекста, я бы хотел, чтобы вы рассмотрели еще один взлом. Выезд, http://code.djangoproject.com/wiki/CookBookThreadlocalsAndUser.
Так можно ли передать переменную пользователя в мой фильтр? – 2009-08-29 13:05:15