Передача данных сразу на все шаблоны django

Как передавать какие-нибудь данные сразу на все шаблоны django? Как, например, модель пользователя

Делаю интернет-магазин, и у меня появилась задача: Сделать так, чтобы кол-во товаров в корзине или в избранном передавалась на все шаблоны. Я думаю, вы знаете, как это работает.

И вот как мне это правильно реализовать на Django?

Я додумался до двух способов:

  1. Первый - самый простой и неудобный - это вручную прописывать к каждому шаблону и если изменить скрипт получения кол-ва, то всё нужно будет изменять вручную.

  2. Второй - добавить в модель пользователя дополнительные поля по типу quantity_products_in_cart...

Даже не знаю... Оба способа выглядят костылями, и я хочу узнать как правильно. Буду очень благодарен за помощь


Ответы (1 шт):

Автор решения: Za Ars

Напишите свой middleware, который будет пихать в request объект с вашими данными, например, корзину текущего пользователя.

class SimpleMiddleware:
    def __init__(self, get_response):
        self.get_response = get_response
        # One-time configuration and initialization.

    def __call__(self, request):
        # Code to be executed for each request before
        # the view (and later middleware) are called.

        request.basket = get_user_basket(request.user) # <==== вот так например

        response = self.get_response(request)

        # Code to be executed for each request/response after
        # the view is called.

        return response

Тогда в шаблоне корзина будет доступна в request.basket. Пример ниже

{% if request.basket %}
    {{ request.basket.count|default:0 }} 
{% endif %}

Пример и подробную информацию можно почитать на оф.сайте документации

→ Ссылка