Настройка корзины в контексте запроса

Создадим обработчик контекста для установки текущей корзины в контекст запроса для шаблонов. Мы сможем получить доступ к этой корзине в любом шаблоне.

Создайте новый файл в каталоге приложения cart и назовите его context_processors.py. Контекстные процессоры могут размещаться в любом месте кода, но создание их в отдельном документе поможет вам лучше организовать структуру проекта. Добавьте в файл следующий код:

from .cart import Cart

def cart(request):
    return {'cart': Cart(request)}

Как видно, контекстный процессор — это функция, которая получает объект запроса в качестве параметра и возвращает словарь объектов, которые будут доступны всем шаблонам, визуализированным с помощью RequestContext. В нашем обработчике контекста мы создаем объект корзины с помощью объекта request и делаем его доступным для шаблонов в виде переменной с именем cart.

Отредактируйте файл Settings.py проекта и добавьте 'cart.context_processors.cart' для параметра context_processors в парамертах TEMPLATES. После изменения этот параметр будет выглядеть следующим образом:

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')]
        ,
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
                'cart.context_processors.cart',
            ],
        },
    },
]

Теперь контекстный процессор будет выполняться при каждом просмотре шаблона с использованием RequestContext Джанго. Переменная cart будет задана в контексте для шаблонов.

Контекстные процессоры выполняются во всех запросах, использующих RequestContext.. Если вы собираетесь получить доступ к базе данных, может понадобиться создать пользовательский тег шаблона вместо контекстного процессора.

Теперь отредактируйте шаблон shop/base.html приложения shop и найдите:

<div class="cart">
    Your cart is empty.
</div>

Замените предыдущие строки следующим кодом:

<div class="cart">
    {% with total_items=cart|length %}
        {% if cart|length > 0 %}
            Your cart:
            <a href="{% url "cart:cart_detail" %}">
                {{ total_items }} item{{ total_items|pluralize }},
                ${{ cart.get_total_price }}
            </a>
        {% else %}
            Your cart is empty.
        {% endif %}
    {% endwith %}
</div>

Запкстите сервер с помощью команды python manage.py runserver. Откройте в браузере http://127.0.0.1:8000/ и добавьте в корзину несколько товаров. Теперь в заголовке сайта можно будет увидеть общее количество товаров в корзине и их общую стоимось:

results matching ""

    No results matching ""