В шаблоне Django я использую for loop
для отображения содержимого.
Этот контент бывает 3-х типов. Каждый тип имеет свой набор условий, HTML и CSS.
Я чувствовал, что включение всей этой обработки в 1 шаблон усложнит поддержку файла. Поэтому вместо этого я использую теги шаблона:
{% load get_display_type_1 %}
{% load get_display_type_2 %}
{% load get_display_type_3 %}
{% for item in content %}
{% if item == '1' %}
{% display_type_1 payload='foo' %}
{% elif item == '2' %}
{% display_type_2 payload='bar' %}
{% elif item == '3' %}
{% display_type_3 payload='foo bar' %}
{% endif %}
{% endfor %}
И где, например, тег шаблона под названием display_type_1
имеет следующий код:
from django import template
register = template.Library()
@register.inclusion_tag(file_name='display_type_1.html')
def display_type_1(payload):
return {'payload':payload}
Пока стандартные вещи.
А теперь взгляните на HTML-шаблон, связанный с тегом template:
{% load myfilter %}
<div class="type1">{{ payload|myfilter }}</div>
т.е. обратите внимание, что здесь я загружаю пользовательский фильтр с именем myfilter
.
Итак, вот проблема: по сути, я вызвал {% load myfilter %}
в цикле for. Как? Поскольку сам тег шаблона находится в цикле for родительского шаблона.
Это имеет более низкую производительность, чем если бы я написал все в родительском шаблоне и загрузил фильтр один раз.
В идеале я не хочу отказываться от использования тегов шаблона таким образом; Я считаю его более ремонтопригодным. Но я также не хочу жертвовать производительностью, загружая фильтры (и т. д.) в цикл for.
Может ли кто-нибудь помочь мне улучшить этот шаблон, сделав его более оптимальным? Наглядный пример был бы великолепен.
Примечание: это упрощенный пример, реальный код сложнее