我需要在我的网页上进行子导航。我继承了主导航所在的base.html,但我不知道如何进行不同页面的子导航。
我考虑制作一个模板标签,我可以在每个模板文件中为子导航指定项目,如果指定了任何子导航项,则只输出子导航。其他人如何做到这一点?
答案 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。
可能感兴趣的套餐: