Nar*_*asK 2 django-templates python-3.x 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
Run Code Online (Sandbox Code Playgroud)
和错误:
“BaseBlock”对象没有属性“bool_fld”
有任何想法吗?
get_context块对象上的方法接收块值作为其第一个参数 - 在 的情况下StructBlock,这是一个类似 dict 的对象,其字段可以作为 访问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
Run Code Online (Sandbox Code Playgroud)
另请参阅http://docs.wagtail.io/en/v2.0/topics/streamfield.html#template-rendering 中的get_context示例。
self.bool_fld在这里不起作用,因为Block实例本身不保存值——它们只是作为不同数据表示之间的转换器。(如果您使用过 Django 表单字段对象,例如forms.CharField,块非常相似;块对象和表单字段对象都知道如何将传递给它们的值呈现为表单字段,但它们不会保留这些值。)
| 归档时间: |
|
| 查看次数: |
1491 次 |
| 最近记录: |