如何动态地将 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”?的主要内容,如果未能解决你的问题,请参考以下文章

如何动态地将css类添加到输入中

当我单击添加行按钮时,如何在 html 中动态地将行添加到表单中?

如何在angularjs中动态地将样式属性添加到具有ng-class的元素

AJAX如何动态地将行添加到表中

从android中的其他类动态地将对象添加到listview

您可以动态地将类属性/变量添加到python中的子类吗?