是否可以使用自定义函数覆盖 wagtail.hooks.register 函数?

Is it possible to override a wagtail.hooks.register function with a custom function?

是否可以使用自定义函数覆盖 wagtail @hooks.register 函数或一起注销函数?

我想要实现的一个示例是编辑 wagtail/contrib/styleguide/wagtail_hooks.py 中的 register_styleguide_menu_item 函数,以便仅向超级用户显示样式指南。

例如;我想覆盖当前功能:

@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 for the main menu or construct_settings_menu for the 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']

注意:item.name 可能不完全是 'styleguide',可能是 'Styleguide'