prosource

장고: 새로운 데이터베이스 항목에서 html 내용을 새로 고치는 방법

probook 2023. 8. 16. 22:28
반응형

장고: 새로운 데이터베이스 항목에서 html 내용을 새로 고치는 방법

저는 장고로 MQTT Dashboard 앱을 개발하고 있습니다.백그라운드에서 실행되는 mqtt 스레드가 있으며, 원격 장치의 데이터를 주기적으로 폴링하여 데이터베이스(MariaDB) 행으로 저장합니다.또한 이 행을 단순 테이블에 표시하는 보기가 있습니다.이제 새 데이터가 나타나면 페이지를 다시 로드하지 않고 이 보기를 새로 고치는 것이 좋습니다. 이 작업을 수행하는 방법이 문제입니다.저는 두 가지 다른 접근법을 생각했습니다.

  1. JS 사용setInterval내용을 주기적으로 새로 고치기 위해 Ajax 호출을 트리거합니다.여기서 문제는 제가 자바스크립트나 jQuery에 능숙하지 않다는 것입니다. 그래서 저는 그것을 어떻게 하는지 간단한 예를 듣고 싶습니다.
  2. 내부에서 데이터를 어떻게든 새로 고칩니다.on_messagemqtt가 새 데이터를 가져올 때 호출되는 함수입니다.여기서 문제는 그것이 가능한지 조차 모른다는 것입니다.

저는 위의 설명이나 그것을 하기 위한 좀 더 다른, 더 적절한 방법에 대한 설명을 해주시면 감사합니다.내 코드는 다음과 같습니다.

새로 고치고 싶은 콘텐츠가 있는 템플릿의 일부:

<div class="row mb-4 justify-content-center text-center">
    <h1 class="text-uppercase text-white font-weight-bold">{% translate "Parameters" %}</h1>
    <table id="device-parameters-table">
        <thead>
            <tr>
                <th scope="col">{% translate "Parameter" %}</th>
                <th scope="col">{% translate "Value" %}</th>
                <th scope="col">{% translate "Unit" %}</th>
            </tr>
        </thead>
        <tbody>
            {% for key, value in latest_read_data.items %}
            <tr>
                <td>{{key}}</td>
                <td>{{value.value}}</td>
                <td>{{value.unit}}</td>
            </tr>
            {% endfor %}
        </tbody>
    </table>
</div>

장치 보기:

def device(request):
    clicked = request.GET.get('device_id')
    dev = Device.objects.get(id=clicked)

    latest_read_data = ReadData.objects.filter(device=dev).order_by('timestamp')

    if latest_read_data:
        read_data = latest_read_data.values()
        read_data = read_data[len(read_data)-1]
        read_data.pop('id')
        read_data.pop('device_id')
        read_data.pop('timestamp')
        parameters_get_units(read_data)
        context = {'latest_read_data': read_data, 'device': dev}
        return render(request, 'dashboard/device.html', context=context)
    else:
        return HttpResponseRedirect('/dashboard')

언급URL : https://stackoverflow.com/questions/67400370/django-how-to-refresh-html-content-on-new-database-entry

반응형