首页 > 解决方案 > Wagtail 在管理员中为 PageChooserBlock 设置默认页面资源管理器视图位置

问题描述

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

标签: pythondjangocontent-management-systemwagtail-streamfieldwagtail-admin

解决方案


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

我用下面的代码创建了新的 JavaScript 文件,并在新实现的媒体方法中添加了它page-chooser.js

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, pageTypes, openAtParentId, canChooseRoot, userPerms);
    }
}

推荐阅读