Wagtail устанавливает местоположение просмотра проводника страниц по умолчанию для PageChooserBlock в admin

#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);
    }
}