Отображение данных MySQL на HTML-странице в Django - данные не отображаются
Я совсем новичок в Django и у меня проблема с отображением данных из базы данных MariaDB MySQL на HTML-странице.
У меня есть унаследованная база данных под названием Vision, в которой есть таблица под названием SensorResult. Я добавил эту базу данных в файл settings.py и создал папку routings с файлом router_db.py, чтобы указать приложению, когда использовать базу данных Vision.
После этого я выполнил следующую команду:
python manage.py inspectdb --database=Vision
В результате была получена распечатка каждой таблицы в базе данных и всех столбцов. Затем я использовал это для создания стандартного файла models.py, используя эту информацию, как показано ниже:
from django.db import models
class Sensorresult(models.Model):
sensorresult = models.AutoField(db_column='SensorResult', primary_key=True) # Field name made lowercase.
sensorid = models.IntegerField(db_column='SensorID') # Field name made lowercase.
visionid = models.IntegerField(db_column='VisionID') # Field name made lowercase.
userinputid = models.IntegerField(db_column='UserInputID', blank=True, null=True) # Field name made lowercase.
value = models.FloatField(db_column='Value') # Field name made lowercase.
timestamp = models.DateTimeField(db_column='TimeStamp') # Field name made lowercase.
class Meta:
db_table = 'SensorResult'
Исходя из этого, я использовал команды makemigrations и migrate для отправки этой модели. Теперь я могу открыть Django Shell и запросить базу данных и получить ответ, что заставляет меня думать, что файлы models.py, settings.py и db_routings.py работают правильно (пожалуйста, скажите мне, если это не так)? Пример команд оболочки и распечатки ответа, который я получаю, выглядит следующим образом:
python manage.py shell
>>> from authenticate.models import Sensorresult
>>> qs = Sensorresult.objects.using('Vision').get(sensorresult="1")
>>> qs.value
556746.0
Из этого я создал следующий views.py файл, который содержит идентичную SQL команду, используемую в оболочке:
from django.http import HttpResponse
from django.shortcuts import redirect, render
from .models import Sensorresult
def db(request):
qs = Sensorresult.objects.using('Vision').get(sensorresult='1')
return render(request, 'authenticate/instruments.html',{'qs':qs})
и затем instruments.html, который выглядит следующим образом:
<div class="overviewcard">
<div class="overviewcard__icon">Engine</div>
<div class="overviewcard__info">{{qs.value}}</div>
Однако по какой-то причине у меня не отображаются никакие данные, просто пусто. У меня также есть страница URLs.py, которая выглядит следующим образом:
from django.urls import path, include
from . import views
from . import models
#used for routing within the app
#use the below format to add further pages
urlpatterns = [
path('instruments/', views.instruments, name="instruments"),
path('instruments/',views.db, name='db'),
]
Я просмотрел множество онлайн-уроков и видео на youtube, но пока ничего не получилось. Если у кого-то есть какие-либо предположения о том, что идет не так, я буду очень признателен.
Большое спасибо
Вы должны использовать уникальные пути для шаблонов url, иначе вы получите конфликты, первый путь всегда совпадает, поэтому ваше представление db никогда не вызывается.
urlpatterns = [
path('instruments/', views.db, name='db'),
path('instruments/foo/', views.instruments, name="instruments"),
]
Диспетчер url перебирает ваши url-шаблоны по порядку и возвращает первый, который соответствует входящему пути, если у вас два шаблона, которые могут соответствовать пути, то всегда будет использоваться первый