Шаблон Django не отображает метод переменной - PullRequest
0 голосов
/ 24 июня 2010

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

Вот шаблон, который я отображаю:

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}} не отображается должным образом, в то время как, очевидно, вызов функции успешен ???

Примечание: функция измерения не использует магию, внутреннее состояние не изменяется, я проверял и каждый раз выдает один и тот же результат, я также проверял, чтобы поставить проверку перед {{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

Ответы [ 2 ]

2 голосов
/ 24 июня 2010

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

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

0 голосов
/ 24 июня 2010

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

...