如何将计算变量添加到 wagtail StructBlock 模板上下文中?
How to add computed variable to the wagtail StructBlock template context?
我想根据 StructBlock
中的其他块值计算一些 custom
变量,并将此 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' object has no attribute 'bool_fld'
有什么想法吗?
块对象上的 get_context
方法接收块值作为其第一个参数 - 在 StructBlock
的情况下,这是一个 dict-like 对象,其字段可以作为 value['some_field']
.
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
另请参阅 http://docs.wagtail.io/en/v2.0/topics/streamfield.html#template-rendering 中的 get_context
示例。
self.bool_fld
在这里不起作用,因为 Block
实例本身不保存值——它们只是充当不同数据表示之间的转换器。 (如果您使用过像 forms.CharField
这样的 Django 表单字段对象,块非常相似;块对象和表单字段对象都知道如何呈现作为表单字段传递给它们的值,但它们不坚持这些值。)
我想根据 StructBlock
中的其他块值计算一些 custom
变量,并将此 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' object has no attribute 'bool_fld'
有什么想法吗?
块对象上的 get_context
方法接收块值作为其第一个参数 - 在 StructBlock
的情况下,这是一个 dict-like 对象,其字段可以作为 value['some_field']
.
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
另请参阅 http://docs.wagtail.io/en/v2.0/topics/streamfield.html#template-rendering 中的 get_context
示例。
self.bool_fld
在这里不起作用,因为 Block
实例本身不保存值——它们只是充当不同数据表示之间的转换器。 (如果您使用过像 forms.CharField
这样的 Django 表单字段对象,块非常相似;块对象和表单字段对象都知道如何呈现作为表单字段传递给它们的值,但它们不坚持这些值。)