检查条件时,请避免在django模板中进行额外的SQL调用

abo*_*nov 4 django django-templates

我注意到,在渲染一些具有大量相关实体查找的复杂页面时,我获得了太多的数据库命中.我能够通过select_related()尽可能在视图中使用来部分地优化它,但是我从条件检查中获得了另一部分命中,也许我在文档中忽略了一些可能有帮助的东西.

我使用django-debug-toolbar来了解这个表达式将给我两个数据库命中 - 一个用于检查条目是否存在而另一个用于实际呈现它.我执行此查找的原因是因为我不希望空的"()"到处都是.是否有模板标签或某些东西我可以用它来包围价值?

{% if project__current_phase__recent_status__comment %}
({{ project__current_phase__recent_status__comment }})
{% endif %}
Run Code Online (Sandbox Code Playgroud)

vas*_*cop 5

在与模板标签.来自文档:

以更简单的名称缓存复杂变量.这在多次访问"昂贵"方法(例如,击中数据库的方法)时很有用.

例:

{% with project_comment=project__current_phase__recent_status__comment %}
   {% if project_comment %}
      ({{ project_comment }})
   {% endif %}
{% endwith %}
Run Code Online (Sandbox Code Playgroud)