#python #django #content-management-system #wagtail-streamfield #wagtail-admin
#python #django #content-management-system #wagtail-streamfield #wagtail-admin
Вопрос:
Способ просмотра страниц из определенного местоположения в PageChooserBlock, например, просмотр «вложенных страниц или страниц того же уровня» с текущей страницы редактирования, на которой используется этот блок. Я заметил, что когда в PageChooserBlock выбрана любая страница, просмотр начинается с той же текущей выбранной страницы. Я хотел начать просмотр по умолчанию с текущей страницы редактирования (на которой используется этот блок PageChooserBlock), если страница еще не выбрана. Есть ли какой-нибудь способ это сделать? Я искал какой-то способ или направление для этого, но безуспешно. Я также проверил хук выбора, но в этом ху нет способа получить текущую страницу редактирования. Поэтому не могу его использовать. Также пытался выполнить поиск в исходном коде PageChooserBlock для такой возможности, но безуспешно для меня или, может быть, я пропустил возможный путь. Ваша помощь приветствуется.
Ответ №1:
Я не сделал именно то, что вы хотите сделать, но я думаю, вы можете создать подкласс AdminPageChooser и реализовать render_js_init, чтобы определить значение по умолчанию parent
по вашему выбору.
Затем вы можете создать подкласс PageChooserBlock
и реализовать widget
, чтобы вернуть экземпляр вашего подкласса AdminPageChooser
.
Я быстро проверил это, и, похоже, это сработало.
Комментарии:
1. Спасибо за ответ и извините за задержку с моей стороны. Я пытаюсь реализовать ваше предложение. Единственное, что я хотел бы знать, это как я могу получить текущий идентификатор страницы , который открыт для редактирования в render_js_init , чтобы я мог установить родительскую страницу, используя ее?
Ответ №2:
Я могу достичь ожидаемого результата, используя предложение @rgs258 с некоторыми изменениями, внесенными в JavaScript. Я подкласс AdminPageChooser и реализовал метод media и добавил какой-то хак для получения pageid страницы редактирования, как показано ниже в JavaScript. Я думаю (знаю), что это не идеальный способ, но, по крайней мере, я могу достичь ожидаемого результата. Пожалуйста, предложите, есть ли лучший способ сделать это.
Я создал новый файл JavaScript с приведенным ниже кодом и добавил его в недавно реализованный метод media после 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);
}
}