如何将计算变量添加到wagtail StructBlock模板上下文?

时间:2018-04-03 15:17:48

标签: python-3.x django-templates wagtail wagtail-streamfield

我想根据custom中的其他块值计算一些StructBlock变量,并将此custom变量添加到模板上下文中。基本上我应该能够在StructBlock模板中使用这个计算变量,就像{{ value.custom }}一样。

这是我的StructBlock

class BaseBlock(blocks.StructBlock):
    bool_fld = blocks.BooleanBlock(required=False, default=False)

    def get_context(self, *a, **kw):
        ctx = super().get_context(*a, **kw)
        ctx['custom'] = 1 if self.bool_fld else 0
        return ctx

错误:

  

'BaseBlock'对象没有属性'bool_fld'

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

块对象上的var foo = "one two"; 方法接收块值作为其第一个参数 - 在get_context的情况下,这是一个类似于dict的对象,其字段可以作为StructBlock访问

value['some_field']

另请参阅http://docs.wagtail.io/en/v2.0/topics/streamfield.html#template-rendering上的class BaseBlock(blocks.StructBlock): bool_fld = blocks.BooleanBlock(required=False, default=False) def get_context(self, value, parent_context=None): ctx = super().get_context(value, parent_context=parent_context) ctx['custom'] = 1 if value['bool_fld'] else 0 return ctx 示例。

get_context在这里工作没有成功,因为self.bool_fld个实例本身并不包含值 - 它们只是作为不同数据表示之间的转换器。 (如果您使用过Django表单字段对象,如Block,则块非常相似;块对象和表单字段对象都知道如何将值传递给它们作为表单字段,但它们不会坚持这些价值观。)