首页 > 解决方案 > 如何根据 if 条件更改模板中的数据级类?

问题描述

在这里,我想根据技能状态更改模板中的数据级别。我正在迭代模板中的技能对象,如果第一个条件匹配,那么在所有技能中,第一个数据级值适用,但不检查其他条件。

如何根据每个技能状态更改数据级值?

楷模

class Skill(models.Model):
    status = (
        (0, 'Beginner'),
        (1, 'Good'),
        (2, 'Expert'),
        (3, 'Pro'),
    )
    name = models.CharField(max_length=255)
    status = models.IntegerField(choices=status)

意见

 skills = Skill.objects.order_by('-status')
        data_level = 0
        for skill in skills:
            print(skill.status)
            if skill.status == 0:
                data_level = 20
            if skill.status == 1:
                data_level = 45
            if skill.status == 2:
                data_level = 70
            if skill.status == 3:
                data_level = 9
        context = {
            'skills': skills,
            'data_level':data_level}

模板

{% for skill in skills %}
<div class="item">
<h3 class="level-title">{{skill.name}}</h3>
<div class="level-bar-inner"
 data-level="{{data_level}}%">
 </div>
{% endfor %}

标签: djangodjango-modelsdjango-viewsdjango-templates

解决方案


您可以在Skill对象中创建一个属性,例如:

skill_to_data_level = {
    0: 20,
    1: 45,
    2: 70,
    3: 9
}

class Skill(models.Model):
    status = (
        (0, 'Beginner'),
        (1, 'Good'),
        (2, 'Expert'),
        (3, 'Pro'),
    )
    name = models.CharField(max_length=255)
    status = models.IntegerField(choices=status)

    @property
    def data_level(self):
        return skill_to_data_level.get(self.status)

然后你可以在模板中渲染它:

{% for skill in skills %}
    <div class="item">
    <h3 class="level-title">{{ skill.name }}</h3>
    <div class="level-bar-inner" data-level="{{ skill.data_level }}%"></div>
{% endfor %}

推荐阅读