Django中的子导航

时间:2013-05-04 06:36:25

标签: python django django-templates django-template-filters

我需要在我的网页上进行子导航。我继承了主导航所在的base.html,但我不知道如何进行不同页面的子导航。

我考虑制作一个模板标签,我可以在每个模板文件中为子导航指定项目,如果指定了任何子导航项,则只输出子导航。其他人如何做到这一点?

2 个答案:

答案 0 :(得分:1)

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

base.html文件

<a href="">Calls</a>
<a href="">Messages</a>
{% block subnav %}
{% endblock %}

calls.html

{% extends "base.html" %}
{% block subnav %}
    <a href="">Outbound calls</a>
    <a href="">Inbound calls</a>
{% endblock %}

messages.html

{% extends "base.html" %}
{% block subnav %}
    <a href="">Sent messages</a>
    <a href="">Recieved messages</a>
{% endblock %}

答案 1 :(得分:1)

实现这种方法的一种简单方法是创建一个带有参数的模板标签,例如页面树中当前页面的唯一id或slug。

E.g。

@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