如何将html类添加到Django模板' for-loop'动态?

时间:2015-07-07 08:20:56

标签: python css django django-templates

我有一个CSS文件,其中定义了我的一些样式:

.class-a{
    /*some styles*/
}
.class-b{
    /*some styles*/
}
.class-c{
    /*some styles*/
}
.class-d{
    /*some styles*/
}

这些样式必须应用于django for-loop的输出。

for-loop:

{% for result in results %}
    <span class="[something]" > {{result}} </span> <br>
{% endfor %}

如何修改此循环,即class="[something]"部分,以便输出看起来像这样,无论是有序还是无序:

<span class="class-a"> result </span>
<span class="class-b"> result </span>
<span class="class-c"> result </span>

我应该这样在上下文中这样做:

results = {
    ResultOne : {
            'name' : 'someName',
            'class' : 'class-a'

    },
    ResultTwo : {
            'name' : 'someName',
            'class' : 'class-b'

    },
}

为每个{{result}}提供类似{{result.class}}和{{result.name}}的内容?

或者是否存在其他方法? 实现它的最佳方法是什么? 感谢。

2 个答案:

答案 0 :(得分:3)

最小化模板中的逻辑

我认为你建议的是要走的路,即在数据进入模板之前对其进行预处理

使用Django模板,复杂逻辑将变得无法维护且无法快速读取

不要混用Python和HTML

在Python代码的CSS类中使用class并不是很好,所以可以在模型的域内调用它,例如。

results = [
    {
            'name' : 'some_name_1',
            'result_type' : 'a'

    },
    {
            'name' : 'some_name_2',
            'result_type' : 'b'

    },
]

并使其成为HTML / CSS只使用result-type来解析CSS名称,所以:

<span class="class-{{result.result_type}}"> {{result.name}} </span>

答案 1 :(得分:3)

您可以使用cycle template tag

{% for result in results %}
    <span class="{% cycle "class-a" "class-b" "class-c" "class-d"%}" > {{result}} </span> <br>
{% endfor %}