Избегайте дополнительных вызовов SQL в шаблонах django при проверке условия - PullRequest
4 голосов
/ 01 апреля 2012

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

Я использовал django-debug-toolbar, чтобы узнать, что это выражение даст мне два попадания в базу данных - одно для проверки наличия записи, а другое для ее визуализации.Причина, по которой я делаю этот поиск, заключается в том, что я не хочу пустую "()" повсюду.Есть ли тег шаблона или что-то, что я мог бы использовать, чтобы окружить значение чем-то?

{% if project__current_phase__recent_status__comment %}
({{ project__current_phase__recent_status__comment }})
{% endif %}

1 Ответ

5 голосов
/ 01 апреля 2012

Шаблон с тегом . Из документов:

Кэширует сложную переменную под более простым именем. Это полезно, когда доступ к «дорогому» методу (например, тот, который попадает в базу данных) несколько раз.

Пример:

{% with project_comment=project__current_phase__recent_status__comment %}
   {% if project_comment %}
      ({{ project_comment }})
   {% endif %}
{% endwith %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...