Django: вызов запросов к БД из шаблона - PullRequest
1 голос
/ 17 июля 2011

У меня есть сайт Django, у которого есть боковая панель с множеством различных полей, которые могут входить в нее в зависимости от страницы. Например, «Последние комментарии», «Последние твиты» или «Избранные истории». Все эти поля требуют выполнения запросов к базе данных.

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

Итак, моя другая мысль заключалась в том, что я мог бы добавить все переменные, которые могут понадобиться всем блокам, на каждую страницу с помощью обработчика контекста, но достаточно ли ORM для выполнения запросов только для страниц, которые на самом деле используют эти переменные? Или это попадет в базу данных, даже если у меня нет ящиков на странице?

Так что я думаю, что мне нужен какой-то специальный тег, где я мог бы просто сказать {% most_recent_comments_box%}, и он был бы достаточно умен, чтобы загрузить любые необходимые переменные из базы данных, а затем вызвать небольшой файл шаблона. Это правильный подход? Как мне это сделать?

Ответы [ 2 ]

4 голосов
/ 17 июля 2011

Это вариант использования для пользовательских тегов шаблона.Прочитайте эту статью (написанную одним из сотрудников Django).

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

1 голос
/ 17 июля 2011

Таким образом, моя другая мысль заключалась в том, что я мог бы добавить все переменные, которые могут понадобиться всем блокам, на каждую страницу с помощью обработчика контекста, но достаточно ли ORM для выполнения запросов только для страниц, которые фактически используют эти переменные? Или это попадет в базу данных, даже если у меня нет ящиков на странице?

Да, ORM будет достаточно умен, чтобы сделать это. Django QuerySets ленивы: https://docs.djangoproject.com/en/dev/topics/db/queries/#querysets-are-lazy

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...