Можно ли переопределить функцию wagtail.hooks.register с помощью пользовательской функции?
Возможно ли переопределить функцию трясогузки @hooks.register пользовательской функцией или вообще отменить регистрацию функции?
Одним из примеров того, чего я хотел бы добиться, является редактирование функции register_styleguide_menu_item в wagtail/contrib/styleguide/wagtail_hooks.py так, чтобы руководство по стилю показывалось только суперпользователям.
Например, я хотел бы переопределить текущую функцию:
@hooks.register("register_settings_menu_item")
def register_styleguide_menu_item():
return MenuItem(
_("Styleguide"), reverse("wagtailstyleguide"), icon_name="image", order=1000
)
с этим:
@hooks.register("register_settings_menu_item")
def register_styleguide_menu_item():
return AdminOnlyMenuItem(
_("Styleguide"), reverse("wagtailstyleguide"), icon_name="image", order=1000
)
(обратите внимание на изменение MenuItem на AdminOnlyMenuItem в третьей строке)
Документация по крючкам wagtail доступна на https://docs.wagtail.org/en/stable/reference/hooks.html, но она не охватывает этот сценарий.
Существует ли механизм для достижения этого?
Для изменения пунктов меню на основе request необходимо использовать другой хук.
Либо construct_main_menu для главного меню, либо construct_settings_menu для меню настроек.
from wagtail.core import hooks
@hooks.register('construct_settings_menu')
def hide_styleguide_menu_item(request, menu_items):
if not request.user.is_superuser:
menu_items[:] = [item for item in menu_items if item.name != 'styleguide']
Примечание: имя элемента может быть не совсем 'styleguide' оно может быть 'Styleguide'.