ページ間のリンク
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を使ってアドレスを作成します。
/drinks/でFlat Whiteをクリックすると、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プレイグラウンド