Я явно жертва какой-то темной магии ...
Вот шаблон, который я визуализировал:
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
2 ответа
Ну ... я нашел эту чертову штуку!
У объекта, который я пытался визуализировать, был метод __getitem__
, который был просто пустым, поэтому словарная индексация работала с этим объектом (без ошибок), поэтому, конечно, вызов функции не был выполнен!
Inspect регистрируется как фильтр, да? Я предполагаю, что иначе весь шаблон задохнется. Возможно ли конфликт зарезервированных слов? В конце концов, inspect
- довольно емкий термин. Вы пробовали переименовать этот фильтр во что-нибудь другое?
Похожие вопросы
Новые вопросы
python
Python - это многопарадигмальный, динамически типизированный, многоцелевой язык программирования. Он разработан для быстрого изучения, понимания и использования, а также для обеспечения чистого и единообразного синтаксиса. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Тем не менее, для вопросов о Python, связанных с версией, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas и NumPy) включите его в теги.