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}} 的东西吗?
或者还有其他方法吗?实现这一目标的最佳方法是什么?谢谢。
我认为你建议的是要走的路,即在数据进入模板之前对其进行预处理
使用 Django 模板,复杂的逻辑将很快变得难以维护和难以阅读
在 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)
您可以使用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)