как адаптировать действия страницы Wagtail-CMS?

#wagtail

Вопрос:

Мне нужно позволить пользователям-администраторам оставаться на странице, пока они нажимают любой из (Опубликовать, отменить публикацию, save_review … и т. Д.), И Не перенаправлять на какие-либо другие страницы и не обновлять страницу редактирования, а вместо этого применять только запрошенные изменения и получать уведомление (сообщение) с указанием действиястатус (успешно или неудачно).

Примечания:

  1. Мне не нужен пример кода JQ, а функциональность бэкэнда (pythonic-way) для управления таким событием.
  2. причин много, например, для улучшения пользовательского интерфейса и снижения затрат на сервер / сеть … и т.д.

Комментарии:

1. Пожалуйста, отредактируйте вопрос, чтобы ограничить его конкретной проблемой с достаточной детализацией для определения адекватного ответа.

Ответ №1:

Вам не нужно «Ajaxify» поведение для достижения большей части этой цели, однако я понимаю, куда вы направлялись.

Когда страница сохраняется (для публикации, отмены публикации или даже просто сохранения черновика), на сервер Django отправляется запрос POST, который сохраняется в базе данных, а затем перенаправляется на родительскую страницу по умолчанию. К сожалению, для поддержки этого запроса в стиле ajax потребуется немало работы.

Однако вы можете изменить поведение перенаправления, используя систему Wagail Hooks, это позволяет вам писать пользовательскую логику для поведения ядра во всем коде Wagtail.

Во-первых, пожалуйста, прочитайте введение и обзор крючков Wagtail

Пример

  • Создайте хук, который будет удерживать пользователя на странице редактирования при публикации (сохранить черновик, опубликовать и т. Д.)
  • В ваш wagtail_hooks.py файл добавьте следующее
 from django.shortcuts import redirect
from django.urls import reverse

from wagtail.core import hooks


@hooks.register("after_edit_page")
def after_edit_page(request, page):

    if request.method == "POST":
        target_url = reverse("wagtailadmin_pages:edit", args=[page.id])
        return redirect(target_url)

 
  • Примечание: вы могли бы посмотреть на то, чтобы не перенаправлять, но вам нужно вернуть ответ, когда кнопка сохранения отправляет сообщение.

Комментарии:

1. Если этого недостаточно, возможно, стоит добавить новый вопрос или пересмотреть существующий, чтобы лучше передать реальную проблему, которую вы пытаетесь решить (т.е. почему вы не хотите, чтобы страница перезагружалась?).

2. есть много причин, одна из которых — UX, а другая — нагрузка на сервер, например, представьте, что если одновременно работает 1000 редакторов, то каждое сохранение и обновление страницы будет стоить намного дороже, чем просто http-запрос на сохранение изменений без повторной загрузки всей страницы, особенно большинствасодержимое не кэшируется

3. Звучит как несколько отличных идей по улучшению, особенно кэширования. Если у вас есть время, было бы действительно полезно разделить эти идеи и поднять их как запросы функций в репозитории Wagtail — github.com/wagtail/wagtail/issues — также было бы неплохо предложить некоторые конкретные улучшения пользовательского интерфейса, если у вас есть идеи. Это может произойти не мгновенно, но, по крайней мере, на GitHub это можно обсудить и отследить, и, возможно, кто-то внесет свой вклад в улучшение. Надеюсь, это поможет.