如何动态地将 html 类添加到 Django 模板“for-loop”中?

Mar*_*rty 3 css python django django-templates

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

.class-a{
    /*some styles*/
}
.class-b{
    /*some styles*/
}
.class-c{
    /*some styles*/
}
.class-d{
    /*some styles*/
}
Run Code Online (Sandbox Code Playgroud)

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

for循环:

{% for result in results %}
    <span class="[something]" > {{result}} </span> <br>
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

如何修改这个循环部分class="[something]",以便输出看起来像这样,按顺序或不按顺序:

<span class="class-a"> result </span>
<span class="class-b"> result </span>
<span class="class-c"> result </span>
Run Code Online (Sandbox Code Playgroud)

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

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

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

    },
}
Run Code Online (Sandbox Code Playgroud)

那么每个 {{ result }} 都会有类似 {{result.class}} 和 {{ result.name}} 的东西吗?

或者还有其他方法吗?实现这一目标的最佳方法是什么?谢谢。

bak*_*kal 5

最小化模板中的逻辑

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

使用 Django 模板,复杂的逻辑将很快变得难以维护和难以阅读

不要混合使用 Python 和 HTML

在 Python 代码中使用 CSS 类并不是很好class,所以也许可以在模型领域内将其命名为,例如

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

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

    },
]
Run Code Online (Sandbox Code Playgroud)

并使 HTML/CSS 仅使用它result-type来解析 CSS 名称,因此:

<span class="class-{{result.result_type}}"> {{result.name}} </span>
Run Code Online (Sandbox Code Playgroud)


409*_*ict 5

您可以使用cycle模板标签

{% for result in results %}
    <span class="{% cycle "class-a" "class-b" "class-c" "class-d"%}" > {{result}} </span> <br>
{% endfor %}
Run Code Online (Sandbox Code Playgroud)