优化在for循环中加载Django模板过滤器的模式

时间:2017-11-16 12:23:37

标签: django django-templates django-template-filters

在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模板:

{% load myfilter %}

<div class="type1">{{ payload|myfilter }}</div>

即。注意我在这里加载一个名为myfilter的自定义过滤器。

所以这就是问题所在:实质上,我在for循环中调用了{% load myfilter %}。怎么样?因为模板标签本身位于父模板的for循环中。

如果我在父模板中写入所有内容并加载过滤器一次,那么性能会降低。

我不希望以这种方式放弃使用模板标签;我发现它更易于维护。但我不想通过在for循环中加载过滤器(等)来牺牲性能。

有人可以帮助我改进这种模式,使其更加优化吗?一个说明性的例子会很棒。

注意:这是一个简化的例子,实际代码更复杂

0 个答案:

没有答案