Вызывают ли пользовательские теги шаблонов запрос к базе данных? - PullRequest
0 голосов
/ 15 сентября 2018

Я использую 5 - 6 пользовательских тегов шаблонов.

Каждый из них похож на следующее:

@register.filter(name = 'time_left')
def time_left(obj):
    if not obj:
        return -1
    if not obj.has_offer_expired():
        return obj.time_left()
    return None

У меня есть это в моем models.py:

def has_offer_expired(self):
    return self.end_time <= timezone.now()

def time_left(self):
    return int((self.end_time - timezone.now()).total_seconds())

При каждом использовании тега шаблона {{ offer | time_left }} будет ли это вызывать запрос к базе данных?Или offer передается в функцию тегов шаблона, и ее атрибуты используются без каких-либо дополнительных запросов к базе данных?

Подробное объяснение работы тегов шаблонов за кулисами приветствуется!

Спасибо.

Изменить: Пожалуйста, добавьте причину, прежде чем голосовать вниз вопрос!

1 Ответ

0 голосов
/ 15 сентября 2018

Зависит от того, как вы работаете с данными в тегах шаблона.

В основном, когда вы загружаете строку или более из базы данных, вы будете иметь все об этом. С другой стороны, если вам нужен доступ к отношениям, вы отправите другой запрос, который также можно объединить с первым запросом, используя методы prefetch .

Вызовы, такие как вызов поля m2m, могут вызвать новый запрос к базе данных, но если вам нужны основные атрибуты, то тот же объект в шаблоне будет передан, и те же данные будут доступны без дополнительного запроса.

prefetch_related ()

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