我关注了mezzanine tree.html
{% if page_branch_in_menu %}
<ul class="nav nav-list navlist-menu-level-{{ branch_level }}">
{% for page in page_branch %}
{% if page.in_menu %}
{% if page.is_current_or_ascendant or not page.is_primary %}
<li class="
{% if page.is_current %} active{% endif %}
{% if page.is_current_or_ascendant %} active-branch{% endif %}
" id="tree-menu-{{ page.html_id }}">
<a href="{{ page.get_absolute_url }}">{{ page.title }}</a>
{% if page.has_children_in_menu %}{% page_menu page %}{% endif %}
</li>
{% endif %}
{% endif %}
{% endfor %}
</ul>
{% endif %}
在base.html我有以下块:
<div class="col-md-2 left">
{% block left_panel %}
<div class="panel panel-default tree">{% page_menu "pages/menus/tree.html" %}</div>
{% endblock %}
</div>
问题是在菜单为空的某些页面上,css样式应用于具有空菜单列表的div,用户可以观察空容器。在html中它看起来像:
<div class="col-md-2 left">
<div class="panel panel-default tree">
<ul class="nav nav-list navlist-menu-level-0"></ul>
</div>
</div>
我可以用.nav:empty {display:none;}隐藏孩子ul但是父母仍然可见。以下是关于类似问题的讨论::empty selector for parent element
是否可以使用Mezzanine模板标签解决此问题?
答案 0 :(得分:2)
{% if page_branch %}
没有帮助,因为它的所有页面都不是in_menu。
所以最好在上下文之前过滤它们。
menu_pages = page_branch.filter(in_menu=True)
此外,您应该将if
块放在div.tree
{% if menu_pages %}
<div class="panel panel-default tree">{% page_menu "pages/menus/tree.html" %}</div>
{% endif %}
另一种方法是编写自定义过滤器
{% with menu_pages=page_branch|filter_in_menu %}
{% if menu_pages %}
...
{% endif %}
{% endif %}
但是无法使用内置语法或Mezzanine标记对查询集应用额外过滤器。
答案 1 :(得分:0)
您可以使用if
标记包装代码。
{% if page_branch %}
<ul>
{% for page in page_branch %}
{% if page.in_menu %}
{% if page.is_current_or_ascendant or not page.is_primary %}
<li>
{% if not page.is_primary %}
<a href="{{ page.get_absolute_url }}">{{ page.title }}</a>
{% endif %}
{% page_menu page %}
</li>
{% endif %}
{% endif %}
{% endfor %}
</ul>
{% endif %}