Существует драгоценный камень Ruby под названием HAML, который поставлется с исполняемым файлом, названным css2sass. Тот исполняемый файл переводит CSS в ДЕРЗОСТЬ , который является метаязыком сверху CSS, который делает намного легче осуществить рефакторинг (лучшим иллюстрированием отношений среди Ваших селекторов). Могло бы стоить смотреть.
Общий ответ состоит в том, что Django принимает решение выполнить запрос, когда вы действительно запрашиваете некоторые записи. Чаще всего это означает перебор набора запросов ( для записи в наборе запросов:
) или использование встроенной функции list ()
для преобразования набора запросов в список.
См. При оценке QuerySets для получения дополнительных сведений из официальных документов.
Это достигается путем определения класса, называемого QuerySet
в django / db / models / query.py
, где специальные методы, такие как __ repr __
, __ getitem __
и __ iter __
, закодированы так, чтобы действовать правильно.
Если вам нужно принудительно выполнить загрузку, просто запустите встроенную функцию списка Python в наборе запросов, например:
qs = SomeModel.objects.all()
ql = list(qs)
Этот вызов list ()
выполнит запрос к БД и загрузит все объекты в память. Это должно происходить довольно редко, но в одном случае вам нужно использовать результаты запроса в нескольких местах ваших шаблонов. Преобразование в список и передача списка в контексте вашего шаблона будет выполнять запрос только один раз, а не один раз для каждого места в вашем шаблоне, который вы повторяете.