如何简洁地表示if/else在Django模板中指定CSS类

Rei*_*ica 6 python django django-templates

在Django模板中,我想基于某些"条件"将CSS类添加到DIV,例如:

<div class="pkg-buildinfo 
            {% if v.release.version == pkg.b.release.version %}active{% else %}inactive{% endif %} 
            {% if v.release.version == project.latest.version %}latest{% else %}notlatest{% endif %}">
Run Code Online (Sandbox Code Playgroud)

(注意v是一个循环变量;整个过程都在for循环中)

上面根据两个条件添加了CSS类"活动"或"非活动"和"最新"或"非最新".

然而,这很难阅读和冗长.我发现该with语句不支持分配表达式/条件的值(与复杂变量相对),这是一个遗憾.有一个更好的方法吗?

Dan*_*man 6

自定义过滤器可能是一个不错的选择。

@register.filter
def active_class(obj, pkg):
    if obj.release.version == pkg.b.release.version:
         return 'active'
    else:
        return 'inactive'
Run Code Online (Sandbox Code Playgroud)

并在您的模板中使用它:

<div class="pkg-buildinfo {{ obj|active_class:pkg }}" 
Run Code Online (Sandbox Code Playgroud)


Ned*_*der 5

您可以将该逻辑放入视图中,并在对象上创建"活动"或"非活动"等属性.然后您只需访问模板中的属性.