【问题标题】:Active tag on Bootstrap with Django使用 Django 的 Bootstrap 上的活动标签
【发布时间】:2016-01-01 02:18:51
【问题描述】:

我在 Bootstrap 的导航栏上有一堆链接

<ul class="nav navbar-nav">
  <li ><a href="{% url 'home' %}">Home</a></li>
  <li ><a href="{% url 'about' %}">About</a></li>
  <li ><a href="{% url 'contact' %}">Contact</a></li>
</ul>

假设我在“主页”部分,我想在 Django 上添加 &lt;li class="active"&gt; 文本。

我的第一直觉是使用 views.py 的上下文变量并执行类似

的操作
context = { 'section' : 'home' }

然后做字符串的匹配

<ul class="nav navbar-nav">
  <li {% if section == 'home' %}class="active"{% endif %}><a href="{% url 'home' %}">Home</a></li>
  <li {% if section == 'about' %}class="active"{% endif %}><a href="{% url 'about' %}">About</a></li>
  <li {% if section == 'contact' %}class="active"{% endif %}><a href="{% url 'contact' %}">Contact</a></li>
</ul>

对我来说,这似乎违反了 DRY,所以我问社区是否有更时尚的方式来表示这一点?

【问题讨论】:

标签: python django twitter-bootstrap


【解决方案1】:

我更喜欢检查模板中的 URL:

<li {% if "/" == request.path %}class="active"{% endif %}><a href="{% url 'home' %}">Home</a></li>
<li {% if 'mypage1' in request.path %}class="active"{% endif %}><a href="{% url 'my_page_1' %}">My Page 1</a></li>

【讨论】:

  • 似乎这是唯一的方法......没有办法使用template.html文件中的通用方法。
  • 是的,我也不喜欢它,因为您检查的字符串有可能出现在另一个 URL 中,并且您会获得两个活动菜单项(尽管可能性不大)。这是迄今为止我能做的最好的事情:)
  • 这真的是最好的方式吗?似乎应该有一种更清洁的方式。
【解决方案2】:

接受的答案并不完美且干燥。

<li {% if 'mypage1' in request.path %}class="active"{% endif %}><a href="{% url 'my_page_1' %}">My Page 1</a></li>

如果您更改 URL,您每次都必须在此处更改。如果忘记了怎么办?

如果您的 URL 中有多个带有“my_page_1”的 URL,例如“127.0.0.7/my_page_2/list/my_my_page_1”,该怎么办。但我们只想要“127.0.0.7/my_my_page_1”。在这种情况下,两个 URL 都将处于活动状态。我们不希望这样

您可以改用request.resolver_match.url_name 检查网址是否匹配。

<li class="nav-item {% if request.resolver_match.url_name == 'index' %}active{% endif %}">

{% with url_name=request.resolver_match.url_name %}
<li class="nav-item {% if url_name == 'index' %}active{% endif %}"
    <a href="{% url 'index' %}" >Home </a>
</li>

{% endwith %}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多