Links zwischen Seiten
Teil des Abschnitts Django-Grundlagen der Django-Journey von Coddy. Lektion 16 von 23.
Jedes Getränk hat seine eigene 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 Namespace. Danach folgen die Converter-Werte, durch Leerzeichen getrennt; sie können Variablen sein: In einer Schleife erstellt {% url 'menu:table' table.number %} die Adresse für jeden Tisch. Jedes Getränk in DRINKS hat jetzt einen eigenen slug.
Ein falscher Name oder Wert führt zum Absturz der Seite mit NoReverseMatch. Ein defekter 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 /drinks/ auf Flat White: Die Flat-White-Seite wird geöffnet.
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