Queryset в унаследованном шаблоне Django

Я новичок в Django и веб-программировании в целом. Погуглил, но не смог найти нужный мне ответ. Вот случай:

У меня есть сайт, где каждая страница, на которой зарегистрирован пользователь, имеет определенное меню навигации. Вот почему они расширяют шаблон под названием base_logged.html, который также расширяет base.html. Проблема в том, что меню навигации частично заполняется запросом к базе данных.

Есть ли способ заполнить это без выполнения запроса в каждом зарегистрированном представлении? Или какой-то вид наследства?

Извините за мой плохой английский.

2 ответа

Решение

Другой вариант - создать пользовательский тег шаблона (возможно, тег включения) и поместить его в базовый шаблон.

Таким образом, в вашем базовом шаблоне вы можете получить что-то вроде этого:

{% navigation_bar user %}

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

some_app.context_processors.my_context_processor.py

from some_app.models import Bar
def my_context_processor():
    return {
        'foo' : Bar.objects.all(),
    }

и в твоих settings.py

TEMPLATE_CONTEXT_PROCESSORS = (
    ...
    'some_app.context_processors.my_context_processor',
    ...
)

и теперь у вас есть доступ ко всем вашим представлениям / шаблонам:

{{ foo }}
Другие вопросы по тегам