Подтвердить что ты не робот

Как передать стандартную статическую переменную из всех представлений в Django?

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

Я хотел бы избежать этого, если это возможно. Есть ли способ рассчитать список один раз и автоматически применить его к каждому шаблону без необходимости явно передавать его в шаблон из каждого представления?

4b9b3361

Ответ 1

Есть несколько возможных решений вашей проблемы.

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

Альтернативным решением было бы создать настраиваемый тег шаблона и использовать его в общем базовом шаблоне для всех страниц, которые вы хотите использовать вашей боковой панели. Теги шаблонов немного сложнее создавать, но они более гибкие.

В любом решении вы также должны посмотреть на инфраструктуру кэша Django . Кэш-структура упрощает временное сохранение ваших вычисленных значений в течение некоторого времени, чтобы сохранить некоторую работу над каждым запросом.

Ответ 3

Наследование шаблона Django должно охватывать это. Вы можете создать базовый шаблон, который обрабатывает ваши функции боковой панели. Другие шаблоны расширяют этот шаблон.

Наследование шаблона: http://www.djangobook.com/en/1.0/chapter04/#s-template-inheritance