Django: более эффективно вычислять в представлениях или шаблонах? - PullRequest
1 голос
/ 31 декабря 2010

Об этом почти наверняка уже спрашивали раньше, поэтому извиняюсь, если это дубликат.Хотя я не могу найти ответ:)

В Django вообще более эффективно выполнять вычисления в представлении или в шаблоне?

Вот простой пример.Я хочу поместить определенную строку в шаблон, в зависимости от значения целого числа.Я мог бы сделать это в views.py:

# in views.py
description = "small"
if count > 10:
    description = "large"
elif count > 5:
    description = "medium"

Или я мог бы сделать это так в шаблоне:

# in template.html
{{ count }} 
({% if count > 10 %}large
{% else %}
{% if count > 5 %}medium{% else %}small{% endif %}
{% endif %})

В этом случае код заметно проще в представлениях,так что, возможно, это отвечает на мой вопрос: но что я действительно хочу знать, так это то, имеет ли значение эффективность для того, чтобы сделать это либо в шаблоне, либо в представлении?

Ответы [ 2 ]

2 голосов
/ 31 декабря 2010

Это зависит от того, что вы подразумеваете под эффективностью.

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

Однако производительность обоих из них будет одинаковой в реальном контексте, так как они оба очень просты.

Более широкое толкование эффективности будет включать в себя возможность сопровождения кода, которыйкак правило, более читабельным и более простым для рефакторинга, когда содержится в представлении (или модели, где это уместно).

В любой интерпретации лучше вынести как можно больше логики из шаблона и в представление контроллеровили шаблоны тегов.

2 голосов
/ 31 декабря 2010

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

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

Но учтите, что django не так строго работе с исходным шаблоном MVC и т. д.templatetags тянут много функциональности внутри шаблона!

...