你看到绿色导航是一个div,上面有几个项目。
现在所有模板都包含绿色导航。
当页面为index/
时,选择第一个项目,当页面为productlist/
时,选择第二个项目。通过css实现效果(如<li class="on"><a href="/index/" name="index">网站首页</a></li>
)。
现在,如果我只能阻止绿色导航(使用{% block %}
),那么可以获得效果吗?如果不使用该块,是否每个模板都应包含绿色导航代码?
如果有更好的方法来减少代码量?
答案 0 :(得分:1)
我不建议为此目的使用块,而是在您的上下文中使用变量:
def index(request):
#your code
context = {
"selected_nav": "index",
#your other stuff
}
return render(request, "template.html", context)
在您的导航模板中:
<li class="{% if selected_nav == 'index' %}on{% endif %}"><a href="/index/" name="index">网站首页</a></li>
另一种选择是在模板中设置selected_nav变量,无论你在哪里包含导航栏,只有当你将它包含在每个模板中时才会这样做:
{% include 'navbar_template.html' with selected_navbar='index' %}
答案 1 :(得分:1)
有两种方法可以做到这一点:
在父模板中设置导航菜单(因此每个模板on
都是带有导航菜单的父模板)。如果您在模板渲染中添加了{% include 'nav.html' with active_menu='index' %}
等上下文变量,那么它在您的父模板中可用,您可以检查该值以决定哪个菜单项应该获得类active_menu
。
或者您可以在每个模板中{% if active_menu=='index' %}
,在模板中设置变量document.getElementById("id").click();
。
在这两种情况下,您都使用document.getElementById("id").onclick();
条件标记在菜单项上设置类。