Я явно жертва какой-то темной магии ...

Вот шаблон, который я визуализировал:

context = Context({'my_cube': c})
template = Template(
    '{% load cube_templatetags %}'
    '{{ my_cube|inspect }} {{ my_cube.measure }}'
)

Вот реализация фильтра inspect:

def inspect_object(obj):
    return obj.measure()

Вот что дает мне рендеринг:

>>> template.render(context)
u'6 None'

Кто-нибудь знает, почему, черт возьми, {{my_cube.measure}} не отображается должным образом, хотя, очевидно, вызов функции успешен ???

NB: функция измерения не делает ничего волшебного, внутреннее состояние не изменяется, я тестировал, и он каждый раз дает один и тот же результат, я также тестировал, чтобы проверить, прежде чем {{cube.measure}} .... не меняется что-нибудь. Я совершенно не понимаю, что происходит ...

РЕДАКТИРОВАТЬ : Я знаю, откуда это, кажется, исходит. Но все равно странно. По какой-то причине атрибут моего объекта не разрешается template.Variable:

>>> Variable('measure').resolve(c) == None
True
>>> Variable('testitesti').resolve(c) == None
True
>>> c.testitesti()
68
#implementation of testitesti :
def testitesti(self):
    return 68
0
sebpiq 24 Июн 2010 в 16:36

2 ответа

Лучший ответ

Ну ... я нашел эту чертову штуку!

У объекта, который я пытался визуализировать, был метод __getitem__, который был просто пустым, поэтому словарная индексация работала с этим объектом (без ошибок), поэтому, конечно, вызов функции не был выполнен!

2
sebpiq 24 Июн 2010 в 14:04

Inspect регистрируется как фильтр, да? Я предполагаю, что иначе весь шаблон задохнется. Возможно ли конфликт зарезервированных слов? В конце концов, inspect - довольно емкий термин. Вы пробовали переименовать этот фильтр во что-нибудь другое?

0
Steve Jalim 24 Июн 2010 в 13:13