如果我只能阻止绿色导航(使用`{%block%}`),那么可以获得效果吗?

时间:2017-08-17 06:49:02

标签: django django-templates

你看到绿色导航是一个div,上面有几个项目。

现在所有模板都包含绿色导航。

当页面为index/时,选择第一个项目,当页面为productlist/时,选择第二个项目。通过css实现效果(如<li class="on"><a href="/index/" name="index">网站首页</a></li>)。

enter image description here

现在,如果我只能阻止绿色导航(使用{% block %}),那么可以获得效果吗?如果不使用该块,是否每个模板都应包含绿色导航代码?

如果有更好的方法来减少代码量?

2 个答案:

答案 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(); 条件标记在菜单项上设置类。