我想根据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'
有什么想法吗?
答案 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
,则块非常相似;块对象和表单字段对象都知道如何将值传递给它们作为表单字段,但它们不会坚持这些价值观。)