Два варианта вижу я:
1. Работать через
context_processors. Создать свой класс процессора и добавить его в сеттинги. Тогда он будет на любой странице срабатывать. Внутри уже этого процессора обрабатывать урлы и так далее.
context_processors.py
from django.core.context_processors import request
def sidebar(request):
return {'context_auto': ...}
settings.py
TEMPLATES = [
{ ...,
'OPTIONS': {
'context_processors': [
"context_processors.sidebar",
],
},
},
]
В любом шаблоне теперь будет доступна переменная "context_auto" вызывать можно {{ context_auto }} или передавать.
2. Другой вариант. Использовать
Inclusion tags, а не
{% include "sidebar.html" %}
и через него выводить свой sidebar. То есть вы создаёте функцию, в которой прописываете логику и загрузку sidebar.html а на странице уже инклудите именно функцию, а не html
templatetags/inclusion_tag.py
@register.inclusion_tag('sidebar.html', takes_context=True)
def sidebar(context):
return ...
В main.html пишем
{% sidebar %}