Menu
CoddyTech

Ссылки между страницами

Часть раздела Основы Django путешествия по Django на Coddy. Урок 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, поэтому неработающая ссылка обнаружится во время создания страницы, а не когда посетитель нажмёт на неё.

challenge icon

Задание

Легко

В drinks.html сделай название каждого напитка ссылкой на его страницу: <a href="...">Latte</a> ведёт на /drinks/latte/. Создай адрес с помощью {% url %} и slug напитка.

Нажми Run и щёлкни по Flat White на /drinks/.

Попробуйте сами

<!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>
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Основы Django

Потренируйтесь самостоятельно: Песочница Django