我有一个基于Wagtails Page
模型的模型,我正在为其中一个模型字段分配一个自定义小部件。在呈现管理视图时,是否可以在widgets HTML模板中访问模型实例?我需要admin视图中的小部件知道SimplePage
小部件属于哪个ID,即获取{{ page.id }}
的值
# models.py
class SimplePage(Page):
name = RichTextField(blank=True)
geom = PointField()
content_panels = Page.content_panels + [
FieldPanel("name"),
FieldPanel("geom", widget=LeafletWidgetWithMedia()),
]
# widgets.py
class LeafletWidgetWithMedia(LeafletWidget):
include_media = True
template_name = "admin/widget.html"
我知道我可以像这样更新我的小部件的上下文:
# widgets.py
# ...
def get_context(self, name, value, attrs):
value = None if value in validators.EMPTY_VALUES else value
context = super(LeafletWidget, self).get_context(name, value, attrs)
context.update(self._get_attrs(name, attrs))
return context
但是我不知道如何将我的SimplePage
实例放入小部件中以更新上下文。(我还尝试了Wagtailsbefore_edit_page
{a1},但没有成功。)
此信息可用于编辑处理程序,而不是小部件。您可以使用自定义编辑处理程序,一旦小部件知道页面实例是什么,它就会重新初始化小部件。大概是这样的:
当面板绑定到页面对象时
on_instance_bound()
被调用。注意,当创建一个新页面时,不会调用它-因此您可能需要小部件中的一些逻辑来处理这种情况然后在初始化时调整
LeafletWidgetWithMedia
以接受此instance
参数,并可以将其从get_context()
方法传递到上下文中:相关问题 更多 >
编程相关推荐