Wagtail在管理员中为PageChooserBlock设置默认页面资源管理器视图位置

问题描述

从PageChooserBlock中特定位置浏览页面的方式,例如从使用此块的当前编辑页面浏览“子页面或相同级别的页面”。 我观察到,当在PageChooserBlock中选择任何页面时,浏览将从相同的当前选定页面开始。 如果尚未选择任何页面,我想从当前编辑页面(使用此PageChooserBlock块)开始认浏览。 有什么办法吗?我用谷歌搜索了某种方法或方向,但没有成功。 我还检查了chooser hook,但是在此钩子中无法获取当前的编辑页面。所以不能使用它。 还尝试在PageChooserBlock的源代码搜索这种可能性,但对我而言没有成功,或者我错过了可能的方法。感谢您的帮助。

解决方法

我并没有完全完成您想要的工作,但是我认为您可能想继承AdminPageChooser并实现render_js_init以便定义您选择的默认parent

然后,您可以继承PageChooserBlock的子类并实现widget,以便返回AdminPageChooser子类的实例。

我快速进行了一下,它似乎起作用了。

,

我能够使用@rgs258 的建议并在 JavaScript 中进行一些修改来达到预期的结果。 我子类化了 AdminPageChooser 并实现了 media 方法,并添加了一些 hack 来获取 pageid 的编辑页面,如下所示在 JavaScript 中。 我认为(知道)这不是完美的方式,但至少我能够达到预期的结果。请建议是否有更好的方法来做到这一点。

我使用以下代码创建了新的 JavaScript 文件,并在 page-chooser.js

之后将其添加到新实现的 media 方法中
if(typeof createPageChooser === 'function'){

    let  originalCreatePageChooser = createPageChooser;
    createPageChooser = function(id,pageTypes,openAtParentId,canChooseRoot,userPerms){
        if (!openAtParentId){
            let path = window.location.pathname;
            openAtParentId = path.replace('/admin/pages/','').replace('/edit/',''); //Know it is not the best way but ...
        }
        originalCreatePageChooser(id,userPerms);
    }
}