Django动态获取视图URL并检查它是否是当前页面

agc*_*nti 17 python django django-templates

考虑这个基本菜单:

<ul class="nav navbar-nav">
  <li class="active"><a href="{% url 'home' %}">Home</a></li>
  <li><a href="{% url 'about' %}">About</a></li>
</ul>
Run Code Online (Sandbox Code Playgroud)

我试图给当前页面的链接一个活动的类,我想基于当前的url和视图的url动态地执行此操作.因此,当用户访问about页面时,该页面现在具有活动类,而主页不具有.

我想逻辑在<li></li>标签内部这样工作:

{% if request.get_full_path = "{% url 'home' %}" %}class="active"{% endif %}
{% if request.get_full_path = "{% url 'about' %}" %}class="active"{% endif %}
Run Code Online (Sandbox Code Playgroud)

但显然我不能{% ... %}互相嵌套两个.

关于如何绕过这两个的任何想法?

Ala*_*air 35

我通常在导航中使用模板继承,与alecxe链接答案类似.但是,可以比较使用if标记中的当前URL,就像您尝试的那样.

url标签允许您将结果保存到一个变量.然后,您可以在if标记中使用该变量.

{% url 'home' as home_url %}
{% if request.get_full_path == home_url %}class="active"{% endif %}
Run Code Online (Sandbox Code Playgroud)

  • 这种方法的另一个优点是,在创建指向它的链接时无论如何都需要 `home_url`,因此实际上唯一额外的事情是 `request.get_full_path` 上的 `if`。顺便说一句,为此,您需要将 `request` 添加到您的模板上下文变量中,您当然可以将其作为默认上下文变量。 (2认同)

has*_*dev 9

很旧的线程!我的回答可能会对未来的读者有所帮助。我这样做了(只需将请求 URL 名称与您的路径名进行比较)

<a class="nav-link {% if request.resolver_match.url_name == 'index' %}active{% endif %}" href="#">Home</a>
Run Code Online (Sandbox Code Playgroud)