python - Wagtail 在管理员中为 PageChooserBlock 设置默认页面资源管理器视图位置
问题描述
从 PageChooserBlock 中的特定位置浏览页面的方式,例如从使用该块的当前编辑页面浏览“子页面或同级页面”。我观察到,当在 PageChooserBlock 中选择任何页面时,浏览将从当前选择的同一页面开始。如果尚未选择任何页面,我想从当前编辑页面(使用此 PageChooserBlock 块)开始默认浏览。有什么办法吗?我用谷歌搜索了一些方法或方向,但没有成功。我还检查了选择器挂钩,但无法在此挂钩中获取当前编辑页面。所以不能用。还尝试在 PageChooserBlock 的源代码中搜索这种可能性,但对我来说没有成功,或者我可能错过了可能的方式。感谢您的帮助。
解决方案
我可以使用@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);
}
}
推荐阅读
- c++ - 为什么我的 If 和 Else 语句不执行任何操作?(c++)
- c++ - C++ 继承和转换问题
- neo4j - .Net 客户端 Neo4J 连接错误 IOException: ... Neo4j 4.0 中的加密设置已更改
- java - 如何在 Websphere 9.5 上运行 JBPM 7.48
- php - Laravel多态多对多与复合键
- vue.js - 检查循环Vuejs中的值是否变化
- r - 将一个观察值移动到整个数据框列表中的不同列的函数?
- node.js - 我如何使用这个包 - xd 文件?
- python - 使用 re 模块进行单词模式匹配和替换
- java - 使用 JDBC 处理数据库中的记录