【问题标题】:Django template doesn't render a Variable's methodDjango 模板不呈现变量的方法
【发布时间】:2010-06-24 12:36:10
【问题描述】:

我显然是某种黑暗魔法的受害者......

这是我渲染的模板:

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 : measure 函数没有任何魔力,内部状态没有改变,我测试过,每次都给出相同的结果,我还测试过将inspect放在{{ 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

【问题讨论】:

    标签: python django django-templates


    【解决方案1】:

    嗯...我找到了该死的东西!

    我试图渲染的对象有一个空的 __getitem__ 方法,所以字典索引在这个对象上工作(没有抛出错误),所以当然没有进行函数调用!

    【讨论】:

      【解决方案2】:

      Inspect 正在注册为过滤器,是吗?我假设否则整个模板会窒息。是否存在可能的保留字冲突?毕竟,inspect 是一个非常重要的术语。您是否尝试过将该过滤器重命名为其他名称?

      【讨论】:

      • 其实这个'inspect'过滤器只是我之前观察到的bug之后写的一个调试过滤器...另外,名字冲突会是一个奇怪的巧合,但是.... tadaaaa:我仍然得到预期值!但我尝试...
      猜你喜欢
      • 2021-08-17
      • 2021-09-24
      • 2017-11-08
      • 2019-04-04
      • 1970-01-01
      • 1970-01-01
      • 2012-12-11
      • 2021-07-16
      • 1970-01-01
      相关资源
      最近更新 更多