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 }}