【django】Templateの継承をしながらactiveを実装する方法

djangoでのテンプレートの継承は強力です.

ですが,activeの切り替えはどうするんだ?と私自身わからなかったことがあるので,その方法を解説します

Headerでのactive切り替えを例に説明します

目次

Headerメニューをページごとでactiveを切り替える

HeaderでHome,Blog, Contactのページ切り替えを行い,そのページごとにactive属性を追加します

やり方はblockタグを実装するだけです

STEP
Headerメニュー

各ページに対応した名前のblockタグを追加します

STEP
各ページ

各ページごとにStep1で追加したblockタグを追加します

Headerメニューの追加

まずはテンプレートの継承元である親HTMLファイルにHeaderを追加します

今回はactive属性にする箇所に別々の名前のblockタグを追加しています

<nav class="navbar navbar-expand-lg navbar-light bg-light">
    <div class="container-fluid">
        <a class="navbar-brand" href="{% url 'home' %}">はやれてお</a>
        <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
            <span class="navbar-toggler-icon"></span>
        </button>
        <div class="collapse navbar-collapse" id="navbarSupportedContent">
            <ul class="navbar-nav me-auto mb-2 mb-lg-0">
                <li class="nav-item">
                    <!--下記にblockタグを追加-->
                    <a class="nav-link {% block homehead %}{% endblock %}" href="{% url 'home' %}">Home</a>
                </li>
                <li class="nav-item">
                    <!--下記にblockタグを追加-->
                    <a class="nav-link {% block bloghead %}{% endblock %}" href="{% url 'blog' %}">Blog</a>
                </li>
                <li class="nav-item">
                    <!--下記にblockタグを追加-->
                    <a class="nav-link {% block contacthead %}{% endblock %}" href="{% url 'contact' %}">Contact</a>
                </li>
            </ul>
            <form class="d-flex" action="{% url 'blog' %}" method="get">
                <input name="q" class="form-control me-2" type="search" placeholder="Search" aria-label="Search">
                <button class="btn btn-outline-primary" type="submit">Search</button>
            </form>
        </div>
    </div>
</nav>

各ページにblockタグを追加してactive属性を追加する

今回のページはHome, Blog, Contactの3つになります

それぞれのHTMLでblockタグが違うので気をつけてください

<!--templates/blog/home.html-->
{% block homehead %}
    active
{% endblock %}

<!--templates/blog/blog.html-->
{% block bloghead %}
    active
{% endblock %}

<!--templates/blog/contact.html-->
{% block contacthead %}
  active
{% endblock %}

これができたらサイトにアクセスしてURLフィールドを更新しましょう

お疲れ様でした

シェアしてくださると嬉しいです!
  • URLをコピーしました!

コメント

コメントする

目次