如何向Wagtail StructBlock模板上下文添加计算变量?
给Wagtail StructBlock添加基于字段值的自定义上下文变量
嘿,我看到你在尝试给Wagtail的StructBlock添加自定义上下文变量,刚好这个问题我之前也碰到过!你当前的代码里有个关键小问题,我来帮你修正并解释清楚:
你之前用self.bool_fld是在访问Block类的字段定义,而不是当前这个Block实例实际提交的字段值。正确的做法是从get_context方法的value参数里获取当前块的真实数据。
这里是修正后的完整代码:
class BaseBlock(blocks.StructBlock): bool_fld = blocks.BooleanBlock(required=False, default=False) def get_context(self, value, parent_context=None, **kwargs): # 先调用父类方法获取基础上下文 ctx = super().get_context(value, parent_context=parent_context, **kwargs) # 从value中获取当前块的实际字段值,计算自定义变量 # value是当前StructBlock的实例数据,包含所有字段的提交值/默认值 ctx['custom'] = 1 if value.bool_fld else 0 return ctx
关键说明:
get_context方法的第一个参数value就是当前StructBlock实例的真实数据,你可以通过value.字段名的方式获取任何字段的实际值(比如这里的value.bool_fld)- 把计算好的
custom变量添加到上下文后,你就能在StructBlock的模板里通过{{ value.custom }}直接调用这个变量了 - 如果需要更复杂的计算(比如依赖多个字段),只需要继续从
value里获取对应的字段值就行,逻辑完全一样
内容的提问来源于stack exchange,提问作者NarūnasK
相关产品推荐
相关产品推荐

