Links zwischen Seiten
Teil des Abschnitts Django-Grundlagen der Django-Journey von Coddy. Lektion 16 von 23.
Jedes Getränk hat seine Seite unter /drinks/<slug>/, und die Liste unter /drinks/ sollte auf diese Seiten verlinken. In einer Vorlage erstellt das Tag {% url %} eine Adresse anhand des Namens einer Route, so wie es reverse() in einer View tut:
<a href="{% url 'menu:about' %}">About us</a>
<a href="{% url 'menu:table' 7 %}">Table 7</a>Zuerst kommt der Name in Anführungszeichen, zusammen mit seinem Namensraum. Danach folgen die Werte der Konverter, durch Leerzeichen getrennt; sie können auch Variablen sein: In einer Schleife erstellt {% url 'menu:table' table.number %} die Adresse für jeden Tisch. Jedes Getränk in DRINKS hat jetzt seinen eigenen slug.
Ein falscher Name oder Wert lässt die Seite mit NoReverseMatch abstürzen. Ein fehlerhafter Link fällt also schon beim Erstellen der Seite auf und nicht erst, wenn ein Besucher darauf klickt.
Aufgabe
EinfachVerlinke in drinks.html den Namen jedes Getränks mit seiner Seite: <a href="...">Latte</a> führt zu /drinks/latte/. Erstelle die Adresse mit {% url %} und dem slug des Getränks.
Klicke auf Ausführen und dann auf Flat White unter /drinks/.
Probier es selbst
<!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>
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Django-Grundlagen
1Deine erste Django-Website
Hallo, DjangoEine zweite Seite4Layouts und statische Dateien
Template-VererbungEin Titel für jede Seite3Vorlagen
Deine erste VorlageVariablen in VorlagenÜbe selbstständig: Django-Playground