我已贾勒特哈迪的“低技术”的做法类似的,呃...上下文(是的,这是一个双关语......这不会使绝对意义上你,除非我告诉你,我没有做导航,但设置了按钮的边框颜色以显示哪个按钮被按下)。
但我认为我的版本更紧凑。我不是只在视图中定义一个简单的上下文变量activebar,而是返回一个字典,但始终只有一个键值对:例如activebar = {'foo':'active'}。
然后在模板中,我简单地在foo锚点中写入class =“{{activebar.foo}}”,并相应地在其他锚点中写入class =“{{activebar.foo}}”。如果只有activebar.foo被定义为具有“active”值,那么bar锚点中的activebar.bar将不会执行任何操作。也许“默默地失败”是恰当的Django谈话。鲍勃是你的叔叔。
编辑︰哎呀......一两天过去了,虽然我上面写的东西确实为我工作的问题出现了,当我把一个新的窗口作为目标放入导航栏的锚点。这似乎是一个奇怪的故障的原因:在点击新窗口(Firefox中的选项卡),然后返回到启动新窗口的那个窗口后,当我快速移动窗口时,导航栏下面的部分显示为空白光标在导航栏上的项目---没有点击任何东西。我不得不通过移动滚动条来强制屏幕重绘(不是页面重新加载,尽管这也起作用,因为它涉及屏幕重绘)。
我太过分了,不知道为什么可能会发生。而且有可能我做了一些其他的事情,导致不知怎么的事情消失了。但是...我发现了一个更简单的方法,对我来说非常合适。我的情况是,从视图中启动的每个子模板都应该使关联的导航栏项目显示为“活动”。事实上,那个navbar项目是启动了启动子模板的视图 - 通常的交易。
我的解决方案---让我们以“登录”导航栏项为例---将其放入包含登录窗体的子模板中。
{% block login %}active{% endblock %}
我把它放在标题栏下面,但我不认为这个位置是重要的。然后,在包含导航栏定义,围绕在登录导航栏项目,我把锚...好LI标记,这里的父模板的代码:
<li class="{% block login %}{% endblock %}"><a href="/mysite/login">Login</a></li>
因此,当子模板被渲染的父母会将登录导航栏项目显示为活动状态,而Bob仍然是您的叔叔。
我上面描述的字典方法是显示哪一行按钮被按下,当它们都在同一个子模板上时。这仍然适用于我,因为只涉及一个儿童模板,我不明白我的新的navbars方法在这种情况下会如何工作。请注意,使用navbars视图的新方法甚至不涉及。简单!
你检查了吗? http://stackoverflow.com/questions/1024168/django-is-there-a-better-way-to-bold-the-current-page-link – rinti
该CSS解决方案看起来很难维护,并需要添加信息在3个不同的地方。 – Boris