首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有办法把django模板变量变成for循环?

有没有办法把django模板变量变成for循环?
EN

Stack Overflow用户
提问于 2020-10-08 21:29:35
回答 1查看 23关注 0票数 0

我在我的模型中有这个:

代码语言:javascript
复制
tank0 = models.ForeignKey(nb200V1, on_delete=models.SET_NULL, null=True, blank=True, related_name='pmp300Tank0')
tank0MQTT = models.BooleanField(default = False)
tank1 = models.ForeignKey(nb200V1, on_delete=models.SET_NULL, null=True, blank=True, related_name='pmp300Tank1')
tank1MQTT = models.BooleanField(default = False)
tank2 = models.ForeignKey(nb200V1, on_delete=models.SET_NULL, null=True, blank=True, related_name='pmp300Tank2')
tank2MQTT = models.BooleanField(default = False)
tank3 = models.ForeignKey(nb200V1, on_delete=models.SET_NULL, null=True, blank=True, related_name='pmp300Tank3')
tank3MQTT = models.BooleanField(default = False)
tank4 = models.ForeignKey(nb200V1, on_delete=models.SET_NULL, null=True, blank=True, related_name='pmp300Tank4')
tank4MQTT = models.BooleanField(default = False)
tank5 = models.ForeignKey(nb200V1, on_delete=models.SET_NULL, null=True, blank=True, related_name='pmp300Tank5')
tank5MQTT = models.BooleanField(default = False)
tank6 = models.ForeignKey(nb200V1, on_delete=models.SET_NULL, null=True, blank=True, related_name='pmp300Tank6')
tank6MQTT = models.BooleanField(default = False)

我想在我的模板中创建一个for循环来生成html,并在for循环中使用i设置变量,如下所示:

代码语言:javascript
复制
{% for i in "0123456" %}
<div class="row" style="margin-top:10px">
    <div class="col-sm-12">
        <div class="card">
            <div class="card-header">
                Tank # {{forloop.counter}}
            </div>
            <div class="card-body">
                <div class="row">
                    <div class="col-lg-2 col-md-3 col-sm-4 align-self-center">
                        <label><b>Serial:</b></label>
                        <a href="#" id="{{obj.serial}}_tank{{i}}">{{obj.tank{{i}}.serial}}</a>
                        <small id="{{obj.tank{{i}}.serial}}_serial_ts" class="form-text text-muted">{{obj.tank{{i}}.timeStamp}}</small>
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>

{% endfor%}

有没有办法做到这一点?

EN

回答 1

Stack Overflow用户

发布于 2020-10-09 15:25:40

我同意w/ @Willem应该使用反向外键。

但是,如果您确实保留了模型结构,那么添加一个返回字段列表的模型属性会怎么样:

代码语言:javascript
复制
@property
def tank_list(self):
   return [
     (getattr(self, f"tank{i}"), getattr(self, f"tank{i}MQTT")
     for i in range(7)
   ]

然后,在模板中,您可以遍历该列表。要获取每个元组中的第0个元素,只需执行以下操作:

代码语言:javascript
复制
{% for tank_fields in obj.tank_list %}
  {{ tank_fields.0 }}
  {{ tank_fields.1 }}
{% endfor %}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64263578

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档