在Django中从view.py传递循环到html模板



我试着在我的模型"机器"然后需要从与每台机器相关的其他表中获取附加信息。我尝试下面的代码在views.py和渲染它到指定的html页面。

def allmachinesLOGO(request):
machines=Machine.objects.all()
c=""
for m in machines:
if m.tb_order_set.filter(status="2").exists():
c="2"
else:
c="0"

context ={'machines':machines,'condition':c}
return render(request,'pline/machineslogos.html',context)
{% if condition == "2"  %}

<h4> working</h4>
<img class="btn-circle" style="width: 15px" src="{% static 'images/icons/icons8-green-circle-48.png' %}" alt="image" />
{% else %}
<h4>stop</h4>
{{ condition }}
<img class="btn-circle" style="width: 15px" src="{% static 'images/icons/icons8-red-circle-48.png' %}" alt="image" />
{% endif %}

在Django中如何正确地将循环从views.py传递到模板

在视图中,在每次循环迭代时,我创建一个具有两个值的字典:'machines', 'status',并将其放入aaa列表中。

删除视图中的行(如果不想显示'status'= '0'的行):

else:
aaa.append({'machines': m, 'status': '0'})

则不记录'machines': m, 'status': '0'行。

也许有一种不需要循环的方法可以通过二级模型进行过滤。如果有这样一种方法,那将会很有趣。

views.py

def allmachinesLOGO(request):
machines = Machine.objects.all()
aaa = []
for m in machines:
if m.tb_order_set.filter(status='2').exists():
aaa.append({'machines': m, 'status': '2'})
else:
aaa.append({'machines': m, 'status': '0'})
context = {'context': aaa}
return render(request, 'pline/machineslogos.html', context)

模板
{% for m in context %}
{% if m.status == '2' %}
<h4> working</h4>
<p>{{ 'machines' }} : {{ m.machines }} {{ 'status' }} : {{ m.status }} </p>
{% else %}
<h4>stop</h4>
<p>{{ 'machines' }} : {{ m.machines }} {{ 'status' }} : {{ m.status }} </p>
{% endif %}
{% endfor %}

还有一种方法。过滤机由二级型号,状态='2'。为了确保这一点,需要进行两个循环(外部循环遍历Machine,内部循环迭代a.tb_order_set.all()并将状态输出到print(stat.status)):

bbb = Machine.objects.filter(tb_order__status='2')#If unique records are needed, then add distinct().
print(bbb)
for a in bbb:
for stat in a.tb_order_set.all():
print(stat.status)

最新更新