我需要在我的页面上进行子导航。我从主导航所在的 base.html 继承,但我不知道如何制作因页面而异的子导航。
我考虑过制作一个模板标签,我可以在其中为每个模板文件中的子导航指定项目,并且仅在指定任何子导航项时才输出子导航。其他人是如何做到的?
我需要在我的页面上进行子导航。我从主导航所在的 base.html 继承,但我不知道如何制作因页面而异的子导航。
我考虑过制作一个模板标签,我可以在其中为每个模板文件中的子导航指定项目,并且仅在指定任何子导航项时才输出子导航。其他人是如何做到的?
为什么不能有一个单独的子导航块并在子模板中覆盖该块?
base.html
<a href="">Calls</a>
<a href="">Messages</a>
{% block subnav %}
{% endblock %}
调用.html
{% extends "base.html" %}
{% block subnav %}
<a href="">Outbound calls</a>
<a href="">Inbound calls</a>
{% endblock %}
消息.html
{% extends "base.html" %}
{% block subnav %}
<a href="">Sent messages</a>
<a href="">Recieved messages</a>
{% endblock %}
一个简单的实现方法是创建一个带有参数的模板标签,例如页面树中当前页面的唯一 id 或 slug。
例如
@register.simple_tag
def subnavigation_for_page(request, page_id, *args, **kwargs):
qs = Page.objects.filter(is_active=True)
current_page = qs.get(id=page_id)
sub_navigation = list()
for page in qs.filter(level__gt=current_page.level):
if page.level > current_page.level:
sub_navigation.append(page)
return sub_navigation
您可以扩展示例以将呈现的导航返回为 html,或使用“as”节点返回变量并在模板本身中定义 html。
可能感兴趣的软件包: