8

request.path現在の URL が表示されることを理解しています。

現在base.html、CSS タブを使用してテンプレートを作成しています。現在「アクティブ」なタブをテンプレートに認識class="active-tab"させ、<a>タグに渡したいと考えています。

だから私は次のようなことをしたかった

<a href="{% url orders_list %}"
    {% if request.path = reverse('orders_list') %}
        class="active-tab"
    {$ endif %}
>Orders</a>

ifしかし、その比較はできないと確信しています。また、GET パラメータを無視してベース (?) URL のみが必要です。

提案やヒントも歓迎します。前もって感謝します!

4

9 に答える 9

20

Josh の回答に基づいて、単純な「if」タグを使用できます。

{% url 'orders_list' as orders_list_url %}
<a{% if request.path == orders_list_url %} class="active"{% endif %}
  href="{{ orders_list_url }}">Orders</a>
于 2013-06-26T04:21:22.247 に答える
4

一番上の答えのより良いバージョンは、ビュー名を逆にすることです:

{% url_active 'reverse_viewname' %}

このバージョンでは、request. 代わりに、タグにコンテキストが必要であることを示し、そこからリクエストを取得します。

from django import template
from django.core.urlresolvers import reverse

register = template.Library()

@register.simple_tag(takes_context=True)
def url_active(context, viewname):
    request = context['request']
    current_path = request.path
    compare_path = reverse(viewname)
    if current_path == compare_path:
        return 'active'
    else:
        return ''
于 2013-08-04T08:05:31.030 に答える
2

クーガーの答えに触発されました:

$("ul.nav [href='"+window.location.pathname+"']").parents("li").addClass('active');

このソリューションは単純な JS であり、Bootstrap のナビゲーション バーで機能します。OPのシナリオでは、次を使用できます。

$("[href='"+window.location.pathname+"']").addClass('active-tab');
于 2013-06-14T21:51:50.030 に答える
2

カスタム テンプレート タグを使用できます

from django import template

register = template.Library()

@register.simple_tag
def active(request, pattern):
    path = request.path
    if path == pattern:
        return 'active'
    return ''

次に、テンプレートでの使用法は次のようなものです。

{% load my_tags %}

{% url orders_list as orders %}
<li class="{% active request orders %}"> 
    <a href="{{ orders }}"> Orders </a> 
</li>

必要に応じてテンプレート タグを変更できます。

于 2012-04-23T00:28:12.187 に答える
1

次の jQuery ステートメントを試してください。

$("[href='{{ request.path }}']").parents("li").addClass('active');
于 2012-05-24T12:44:45.327 に答える
1

使用法:{% url_active "home" "other-view" "and-so-on" success="active-specific-class" %}

from django import template

register = template.Library()


@register.simple_tag(takes_context=True)
def url_active(context, *args, **kwargs):
    if 'request' not in context:
        return ''

    request = context['request']
    if request.resolver_match.url_name in args:
        return kwargs['success'] if 'success' in kwargs else 'active'
    else:
        return ''
于 2013-08-22T20:48:17.337 に答える
1

ビューで必要なもの(request.path = reverse('orders_list')たとえば)を計算し、結果をテンプレートに渡すことができます。ビュー (python コード) では、好きなだけパスを操作できます。

1 つの URL が他の URL のプレフィックスであるかどうかを確認できます。

于 2012-04-21T22:32:38.050 に答える
0

jQueryでそれを行うハッキングされた方法を見つけました...しかし、私はまだより良い解決策を求めています。

jQuery:

var tab_list = {
    'orders-tab' : '{% url orders_list %}',
    'users-tab'  : '{% url users_list %}',
    'vendors-tab': '{% url vendors_list %}',
    'places-tab' : '{% url places_list %}'
}

$(document).ready(function() {
    for(var property in tab_list) {
        if('{{ request.path }}' == tab_list[property]) {
            $('#' + property).addClass('active-tab')
            break
        }
    }
})

HTML:

<ul id="tabs" class="fl">
    <li><a href="#" id="dashboard-tab" class="dashboard-tab">Dashboard</a></li>
    <li><a href="{% url orders_list %}" id="orders-tab">Orders</a></li>
    <li><a href="{% url users_list %}" id="users-tab">Users</a></li>
    <li><a href="{% url vendors_list %}" id="vendors-tab">Vendors</a></li>
    <li><a href="{% url places_list %}" id="places-tab">Places</a></li>
</ul>
于 2012-04-22T22:50:25.377 に答える