サイトのナビゲーション
CoddyのDjangoジャーニー「Djangoの基礎」セクションの一部。レッスン 23/23。
サイトには現在、共通レイアウトを持つページが5つあります(Aboutにもテンプレートができました)。しかし、base.htmlのナビゲーションには3つしか記載されておらず、現在どのページにいるのかも表示されません。
すべてのテンプレートは、応答対象のリクエストであるrequestを読み取れます。これは、settings.pyでrequestコンテキストプロセッサがTEMPLATESに記載されているためです。request.resolver_matchは、一致したルートを示します。url_nameは名前空間を含まない名前("contact")で、view_nameは完全な名前("menu:contact")です。テンプレートでは、1つのページだけにメッセージを表示できます。
{% if request.resolver_match.url_name == "contact" %}
<p>We reply within a day.</p>
{% endif %}チャレンジ
中級base.htmlで、ナビゲーションリンクをHome、Menu、Drinks、Hours、Aboutの順に作成し、それぞれのリンク先は{% url %}で指定します。各ページでは、そのページへのリンクだけにclass="active"を設定します。
style.cssでnav a.activeに太字などのスタイルを設定し、Runを押してナビゲーションをクリックして確認します。
自分で試してみよう
{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>{% block title %}Corner Café{% endblock %}</title>
<link rel="stylesheet" href="{% static 'menu/style.css' %}">
</head>
<body>
<nav>
<a href="{% url 'menu:home' %}">Home</a>
<a href="{% url 'menu:drinks' %}">Drinks</a>
<a href="{% url 'menu:about' %}">About</a>
</nav>
<main>
{% block content %}{% endblock %}
</main>
</body>
</html>
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
Djangoの基礎のすべてのレッスン
自分で練習してみよう: Djangoプレイグラウンド