如何动态地将 html 类添加到 Django 模板“for-loop”?
Posted
技术标签:
【中文标题】如何动态地将 html 类添加到 Django 模板“for-loop”?【英文标题】:How to add html classes to a Django template 'for-loop' dynamically? 【发布时间】:2015-09-24 15:09:41 【问题描述】:我有一个 CSS 文件,其中定义了我的一些样式:
.class-a
/*some styles*/
.class-b
/*some styles*/
.class-c
/*some styles*/
.class-d
/*some styles*/
这些样式必须应用于 django for-loop
的输出。
for循环:
% 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 的东西吗?
或者是否存在其他方法? 实现它的最佳方法是什么? 谢谢。
【问题讨论】:
【参考方案1】:最小化模板中的逻辑
我认为您的建议是可行的方法,即在数据进入模板之前对其进行预处理
使用 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>
【讨论】:
【参考方案2】:您可以使用cycle
template tag:
% for result in results %
<span class="% cycle "class-a" "class-b" "class-c" "class-d"%" > result </span> <br>
% endfor %
【讨论】:
以上是关于如何动态地将 html 类添加到 Django 模板“for-loop”?的主要内容,如果未能解决你的问题,请参考以下文章
当我单击添加行按钮时,如何在 html 中动态地将行添加到表单中?
如何在angularjs中动态地将样式属性添加到具有ng-class的元素