django 通过按下按钮刷新html文件中显示的变量

vmpqdwk3  于 2023-07-01  发布在  Go
关注(0)|答案(2)|浏览(135)

我有一个程序,从我的树莓派传感器获取数据,我希望从树莓获取的数据显示在网页上,这个想法是,它可以更新每次你按下一个按钮,它在网络上。我现在正在使用django来创建网页,但我不知道它是否对我正在尝试做的事情来说太复杂了。下面是我的数据提取器代码:

import bme280
import smbus2
from time import sleep

port = 1
address = 0x76 # Adafruit BME280 address. Other BME280s may be different
bus = smbus2.SMBus(port)


bme280.load_calibration_params(bus,address)

bme280_data = bme280.sample(bus,address)
humidity  = bme280_data.humidity
pressure  = bme280_data.pressure
ambient_temperature = bme280_data.temperature

下面是django views.py文件:

from django.shortcuts import render
from django.http import HttpResponse
import sys
sys.path.append('/home/jordi/weather-station/data')
from bme280_sensor import humidity, ambient_temperature, pressure
from subprocess import run,PIPE

# Create your views here.

def home(request):
    return render(request, 'base.html', {'humitat': humidity, 'temperatura': ambient_temperature, 'pressio': pressure})

def index(request):
    return HttpResponse("EL temps de vilafant")

最后,我有一个html文件:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <p>Aqui podras veure el temps de vilafant en un futur, no tinguis presa</p>
    <h1>La humitat d'avui és: {{humitat}}</h1>
    <h1>La temperatura d'avui és: {{temperatura}} Cº</h1>
    <h1>La pressió d'avui és: {{pressio}}</h1>

    <input type="button"><br><br>

</body>
</html>

我怎样才能使在html文件中创建的按钮更新html页面中显示的变量?
我曾尝试创建一个按钮并链接它,以便它可以运行数据提取器文件另一次,但发现页面中显示的变量没有更新。

368yc8dk

368yc8dk1#

问题是,因为views.py在启动应用程序时只加载once,所以变量不会改变。你需要写一个函数来重新加载你的数据,比如:
sensors.py (我通过模拟值进行了测试,因此它是一个不同的函数)

...
def update_sensor_data():
    bme280_data = bme280.sample(bus,address)
    data = {    
        'humitat': bme280_data.humidity,
        'pressio': bme280_data.pressure,
        'temperatura': bme280_data.temperature
    }
    return data

views.py

from .sensors import update_sensor_data

def home(request):
    data = update_sensor_data()
    return render(request, 'base.html', data)

然后使用按钮向视图发送GET请求,从而重新加载数据并使用新值呈现页面:
home.html

<body>
    <p>Aqui podras veure el temps de vilafant en un futur, no tinguis presa</p>
    <h1>La humitat d'avui és: {{humitat}}</h1>
    <h1>La temperatura d'avui és: {{temperatura}} Cº</h1>
    <h1>La pressió d'avui és: {{pressio}}</h1>

    <a href="{% url 'home' %}" >
        <button>Update</button>
    </a>
</body>
mefy6pfw

mefy6pfw2#

也许你把按钮连接到一个url路径,每隔x秒轮询一次。我推荐这样的东西

相关问题