Я изменяю тег шаблона плоского меню Wagtail Menus, чтобы принимать переменную контекста вместо строки для дескриптора. Сценарий использования заключается в том, что я хочу получить определенное меню, основанное на slugified версии имени группы пользователя.
Шаблон выглядит следующим образом:
{% for group in user.groups.all %}
{% with handle=group.name|slugify %}
{% utility_flat_menu handle %}
{% endwith %}
{% endfor %}
Теги templaet выглядят следующим образом:
@register.simple_tag(takes_context=True)
def utility_flat_menu(
context, handle, max_levels=None, show_menu_heading=False,
apply_active_classes=False, allow_repeating_parents=True,
show_multiple_levels=True, template='', sub_menu_template='',
sub_menu_templates=None, fall_back_to_default_site_menus=None,
use_absolute_page_urls=False, add_sub_menus_inline=None, *args,
**kwargs
):
validate_supplied_values('flat_menu', max_levels=max_levels)
if fall_back_to_default_site_menus is None:
fall_back_to_default_site_menus = settings.FLAT_MENUS_FALL_BACK_TO_DEFAULT_SITE_MENUS
if not show_multiple_levels:
max_levels = 1
menu_class = settings.models.FLAT_MENU_MODEL
return menu_class.render_from_tag(
context=context,
handle=context,
fall_back_to_default_site_menus=fall_back_to_default_site_menus,
max_levels=max_levels,
apply_active_classes=apply_active_classes,
allow_repeating_parents=allow_repeating_parents,
use_absolute_page_urls=use_absolute_page_urls,
add_sub_menus_inline=add_sub_menus_inline,
template_name=template,
sub_menu_template_name=sub_menu_template,
sub_menu_template_names=split_if_string(sub_menu_templates),
show_menu_heading=show_menu_heading,
**kwargs
)
Этот тег является заменой тега шаблона плоского меню Wagtail Menus, найденного здесь: https://github.com/rkhleics/wagtailmenus/blob/1a938576adb801c455bea4b64906fb135c89f65f/wagtailmenus/templatetags/menu_tags.py#L46
Итак, я пытаюсь разрешить ручку принятьконтекстная переменная. Я могу на всю жизнь понять, как заставить это работать. То, что вы видите для handle = context
, - это мое предположение о том, где должно произойти изменение, но я предполагаю.