ページ間のリンク
CoddyのDjangoジャーニー「Djangoの基礎」セクションの一部。レッスン 16/23。
すべてのドリンクには /drinks/<slug>/ にページがあり、/drinks/ の一覧からそれらのページにリンクする必要があります。テンプレートでは、{% url %} タグがルート名からアドレスを作成します。これはビュー内の reverse() と同じです。
<a href="{% url 'menu:about' %}">About us</a>
<a href="{% url 'menu:table' 7 %}">Table 7</a>名前を最初に引用符で囲み、名前空間を付けます。コンバーターの値はその後にスペースで区切って指定し、変数を使うこともできます。ループ内で {% url 'menu:table' table.number %} を使うと、それぞれのテーブルのアドレスが作成されます。DRINKS の各ドリンクには、それぞれ独自の slug が設定されています。
名前や値が間違っていると、ページは NoReverseMatch でエラーになります。そのため、リンク切れは訪問者がクリックしたときではなく、ページを作成している間に見つかります。
チャレンジ
簡単drinks.htmlで、それぞれのドリンク名をそのページへのリンクにします。<a href="...">Latte</a>は/drinks/latte/に移動します。{% url %}とドリンクのslugを使ってURLを組み立てます。
Runを押して、/drinks/にあるFlat Whiteをクリックします。
自分で試してみよう
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Our Drinks</title>
</head>
<body>
<h1>Our Drinks</h1>
<p class="count">{{ drinks|length }} drink{{ drinks|pluralize }}</p>
<ul>
{% for drink in drinks %}
<li class="drink">
{{ drink.name }}
<span class="price">${{ drink.price|floatformat:2 }}</span>
{% if drink.sold_out %}
<span class="sold-out">Sold out</span>
{% endif %}
</li>
{% empty %}
<li>No drinks today.</li>
{% endfor %}
</ul>
</body>
</html>
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
Djangoの基礎のすべてのレッスン
自分で練習してみよう: Djangoプレイグラウンド