Передача данных сразу на все шаблоны django
Как передавать какие-нибудь данные сразу на все шаблоны django? Как, например, модель пользователя
Делаю интернет-магазин, и у меня появилась задача: Сделать так, чтобы кол-во товаров в корзине или в избранном передавалась на все шаблоны. Я думаю, вы знаете, как это работает.
И вот как мне это правильно реализовать на Django?
Я додумался до двух способов:
Первый - самый простой и неудобный - это вручную прописывать к каждому шаблону и если изменить скрипт получения кол-ва, то всё нужно будет изменять вручную.
Второй - добавить в модель пользователя дополнительные поля по типу quantity_products_in_cart...
Даже не знаю... Оба способа выглядят костылями, и я хочу узнать как правильно. Буду очень благодарен за помощь
Ответы (1 шт):
Напишите свой 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 %}
Пример и подробную информацию можно почитать на оф.сайте документации