0

我需要在我的页面上进行子导航。我从主导航所在的 base.html 继承,但我不知道如何制作因页面而异的子导航。

我考虑过制作一个模板标签,我可以在其中为每个模板文件中的子导航指定项目,并且仅在指定任何子导航项时才输出子导航。其他人是如何做到的?

4

2 回答 2

1

为什么不能有一个单独的子导航块并在子模板中覆盖该块?

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 %}
于 2013-05-04T08:26:15.810 回答
1

一个简单的实现方法是创建一个带有参数的模板标签,例如页面树中当前页面的唯一 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。

可能感兴趣的软件包:

django-mptt

于 2013-05-04T08:27:00.007 回答