2009-08-29 4 views
0

У меня есть пользовательский фильтр user_tz, который принимает пользователя в качестве аргумента. Он отлично работает везде, но когда я попытался использовать этот фильтр в теге перегруппировки, он не сказал, что пользователь не существует.Проблема с тегом перегруппировки Django

Код:

{% перегруппировать proj_messages.object_list по created_on | user_tz: пользователь, как proj_message_list%}

Это ошибка я получаю: Caught исключение во время рендеринга: Failed поиска для ключа [пользователь] в 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, чтобы содержать эту пользовательскую переменную из представления или используя дополнительный фильтр в объекте-списке из шаблона. Но лучше, если вы хотите, чтобы user был доступен в любом месте, вне контекста, я бы хотел, чтобы вы рассмотрели еще один взлом. Выезд, http://code.djangoproject.com/wiki/CookBookThreadlocalsAndUser.

+0

Так можно ли передать переменную пользователя в мой фильтр? – 2009-08-29 13:05:15

Смежные вопросы