【问题标题】:Django; 2 model/class/tables pass into one template姜戈; 2 个模型/类/表传入一个模板
【发布时间】:2019-07-12 14:36:58
【问题描述】:

如果我问一些愚蠢的问题,请原谅我,我是编码行业的新手

我一直致力于 Django 项目,以创建仪表板来展示水培温室的案例监控。

所以我创建了两个模型;

class tank_system(models.Model):
PH = models.DecimalField(default=7.5,max_digits=3, decimal_places=1)
EC = models.DecimalField(default=13.3,max_digits=3, decimal_places=1)
Winlet = models.DecimalField(default=20.1, max_digits=3, decimal_places=1)
Woutlet = models.DecimalField(default=20.3,max_digits=3, decimal_places=1)
WaterLevel = models.IntegerField(default=500)
TempWater = models.IntegerField(default=25)
tanks = models.IntegerField(default=1)
datetime = models.DateTimeField(default=timezone.now())

class ambient (models.Model):
TempRoom = models.IntegerField(default=25)
CO2 = models.DecimalField(default=20.0, max_digits=3, decimal_places=1)
O2 = models.DecimalField(default=20.0,max_digits=3, decimal_places=1)
Humdity = models.IntegerField(default=25)
Room = models.IntegerField(default=1)
datetime = models.DateTimeField(default=timezone.now())

我将两个模型的数据渲染到一个模板中

这里是我的观点;

from django.shortcuts import render, get_object_or_404
from CGI.models import tank_system, ambient

def index(request):
    tank = tank_system.objects.all()
    room = ambient.objects.all()
    return render(request, 'CGI/Pages/DashBoard.html', {'tank': tank},{'room': room}) 

当我尝试这个时,我只得到了表格 1 的数据

这是我的 html 模板;

{% extends "base.html" %}
 {% block content %}
{%load staticfiles%}
 {% load static %}
 <div class = "containor">
 <div class ="row" id = "row1">
 <div class ="col-sm-6" style="background-color:">
    <h2>Camera</h2>
 </div>

<div class ="col-sm-6" style="background-color:">
    <h2>Ambinet</h2>
</div>
</div>

<div class = "containor">
    <div class="row" id="row2">
        <div class ="col-sm-6" id="Cam1" style="background-color:">
            <div class="containor">
                <video id="livestream" width="550" height="350" autoplay></video>
                 <canvas class = "my-4 chartjs-render-monitor" id="live_vid" height="1"></canvas>
                <script src="{% static 'FrounterWeb/JS-code/Stream.JS' %}" ></script>
            </div>
        </div>

        <div class ="col-sm-2" id="Humdity" style="background-color:">
            <div class="containor">
                <center>
                    <picture>
                        <img src="{% static 'FrounterWeb/img/Humidty_icon.png' %}" alt="RoomTemp">
                    </picture>
                <br>
                    <h1>
                    {% for ambient in room %}
                         {% if forloop.first %}
                         {{  ambient.Humdity }}
                         {% endif %}
                         {% endfor %}
                    %</h1>
                </center>
            </div>
        </div>

        <div class ="col-sm-2" id="Roomtemp" style="background-color:">
            <div class="containor">
                <center>
                    <picture>
                        <img src="{% static 'FrounterWeb/img/RoomTemp.png' %}" alt="RoomTemp">
                    </picture>
                <br>
                    <h1>
                    {% for ambient in room %}
                         {% if forloop.first %}
                         {{  ambient.TempRoom }}
                         {% endif %}
                         {% endfor %}
                    C</h1>
                </center>
            </div>
        </div>

        <div class ="col-sm-2" id="co2" style="background-color:">
            <div class="containor">
                <center>
                    <picture>
                        <img src="{% static 'FrounterWeb/img/co2_icon.png' %}" alt="co2">
                    </picture>
                <br>
                    <h1>
                    {% for ambient in room %}
                         {% if forloop.first %}
                         {{  ambient.CO2 }}
                         {% endif %}
                         {% endfor %}
                    </h1>
                </center>
            </div>
        </div>

    </div>
</div>

<div class = "containor" >
    <div class="row" id = "row3" >
        <div class ="col" style="background-color:">
            <center>
                <h2>Water tank</h2>
            </center>
        </div>
        </div>
    </div>
</div>

<div class = "containor">
    <div class="row" id ="row4" >

        <div class ="col-sm-2">
            <div class="containor">
                <center>
                        <picture>
                            <img src="{% static 'FrounterWeb/img/pHicon.png' %}" alt="co2">
                        </picture>
                    <br>
                    <h1>
                    {% for tank_system in tank %}
                         {% if forloop.first %}
                         {{ tank_system.PH }}
                         {% endif %}
                         {% endfor %}
                    </h1>
                </center>
            </div>
        </div>

        <div class ="col-sm-2">
            <div class="containor">
                <center>
                        <picture>
                            <img src="{% static 'FrounterWeb/img/EC-icon.png' %}" alt="co2">
                        </picture>
                    <br>
                    <h1>
                    {% for tank_system in tank %}
                         {% if forloop.first %}
                         {{ tank_system.EC }}
                         {% endif %}
                         {% endfor %}
                    %</h1>
                </center>
            </div>
        </div>

        <div class ="col-sm-2">
            <div class="containor">
                <center>
                        <picture>
                            <img src="{% static 'FrounterWeb/img/WaterTemp.png' %}" alt="co2">
                        </picture>
                    <br>
                    <h1>
                    {% for tank_system in tank %}
                         {% if forloop.first %}
                         {{ tank_system.TempWater }}
                         {% endif %}
                         {% endfor %}
                    C</h1>
                </center>
            </div>
        </div>

        <div class ="col-sm-2">
            <div class="containor">
                <center>
                        <picture>
                            <img src="{% static 'FrounterWeb/img/Flow-icon.png' %}" alt="co2">
                        </picture>
                    <br>
                    <h1>
                    {% for tank_system in tank %}
                         {% if forloop.first %}
                         {{ tank_system.Winlet }}
                         {% endif %}
                         {% endfor %}
                    ml/hr</h1>
                </center>
            </div>
        </div>

        <div class ="col-sm-2">
            <div class="containor">
                <center>
                        <picture>
                            <img src="{% static 'FrounterWeb/img/Flow-out-icon.png' %}" alt="co2">
                        </picture>
                    <br>
                    <h1>
                    {% for tank_system in tank %}
                         {% if forloop.first %}
                         {{ tank_system.Woutlet }}
                         {% endif %}
                         {% endfor %}
                    ml/hr</h1>
                </center>
            </div>
        </div>

        <div class ="col-sm-2">
            <div class="containor">
                <center>
                        <picture>
                            <img src="{% static 'FrounterWeb/img/waterlevel-icon.png' %}" alt="Waterlevel">
                        </picture>
                    <br>
                    <h1>
                    {% for tank_system in tank %}
                         {% if forloop.first %}
                         {{ tank_system.tanks }}
                         {% endif %}
                         {% endfor %}
                    L</h1>
                </center>
            </div>
        </div>

    </div>
</div>

<div class = "containor">
    <div class="row" id="row5" >

        <div class ="col-sm-6" >
            <h1>Water data</h1>
        </div>

        <div class ="col-sm-6" >
            <h1>Room data</h1>
        </div>

    </div>
</div>

<div class = "containor">
    <div class="row" id="row6" >

        <div class ="col-sm-6" >
            <div class="float-sm-none" id = Waterchart>

            </div>
        </div>

        <div class ="col-sm-6" >
            <div class="float-sm-none" id = Roomchart>


            </div>
        </div>

    </div>
</div>

这里的图片更好理解;

如果你能帮到我,真的很感激

【问题讨论】:

    标签: django django-models django-templates django-views


    【解决方案1】:

    您的渲染中有 4 个参数,其中 2 个是上下文。它只需要 一个 带有上下文的字典,或者您可以创建一个上下文字典变量并将其作为参数传递给渲染。

    试试这个:

    from django.shortcuts import render, get_object_or_404
    from CGI.models import tank_system, ambient
    
    def index(request):
        tank = tank_system.objects.all()
        room = ambient.objects.all()
        return render(request, 'CGI/Pages/DashBoard.html', {'tank': tank,'room': room}) 
    

    from django.shortcuts import render, get_object_or_404
    from CGI.models import tank_system, ambient
    
    def index(request):
        tank = tank_system.objects.all()
        room = ambient.objects.all()
        context = {
               'tank': tank,
               'room': room  
           }
        return render(request, 'CGI/Pages/DashBoard.html',context) 
    

    【讨论】:

      【解决方案2】:

      在您的索引方法中,进行如下更改:

      def index(request):
          tank = tank_system.objects.all()
          room = ambient.objects.all() 
          return render(request, 'CGI/Pages/DashBoard.html', {'tank': tank, 'room': room}) 
      

      【讨论】:

        【解决方案3】:

        您可以使用两种不同的方式传递数据

        def index(request):
            tank = tank_system.objects.all()
            room = ambient.objects.all()
            return render(request, 'CGI/Pages/DashBoard.html', {'tank': tank,'room': room}) 
                          or 
            return render(request, 'CGI/Pages/DashBoard.html', locals())
        locals() stands for get all local variable/objects and pass to the html as context
        

        【讨论】:

        • 请不要在您的代码中使用locals() 来执行此操作。这是一种非常糟糕的编程风格,很难维护。
        • 我同意你的看法@dirkgroten。但对于小型功能,它似乎没问题。我明白你对 locals() 的看法。它将收集所有数据并发送到 html,但这里有一些数据不需要发送到 html。那个时候我们可以使用上下文而不是 locals()。
        猜你喜欢
        • 2016-01-18
        • 1970-01-01
        • 2020-08-17
        • 1970-01-01
        • 1970-01-01
        • 2016-11-06
        • 1970-01-01
        • 2021-03-13
        • 2015-05-24
        相关资源
        最近更新 更多