Queryset в унаследованном шаблоне Django - PullRequest
2 голосов
/ 23 марта 2012

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

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

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

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

Ответы [ 2 ]

3 голосов
/ 23 марта 2012

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

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

{% navigation_bar user %}
0 голосов
/ 23 марта 2012

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

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