• django已连接数据库,但是前端不显示任何信息(包括数据标题和数据内容)


    关注 码龄 粉丝数 原力等级 -- 被采纳 被点赞 采纳率 pkchenwang 2024-05-07 09:25 采纳率: 0% 浏览 16 首页/ Python / django已连接数据库,但是前端不显示任何信息(包括数据标题和数据内容) django前端数据库 问题遇到的现象和发生背景 设计一个部门使用,用于管理书籍,手机的网页.基于django,通过使用pycharm编写+mySQL数据库(navicat管理数据),目前碰到的问题是,网页无法显示数据库信息(包括数据标题和数据内容),不知道问题出在哪里django导航视图 urls.py代码如下 from django.urls import path from app01 import views urlpatterns = [ path(r'', views.home), path(r'login/', views.login), path(r'lib/list/', views.lib_list), path(r'lib/list//borrow/', views.lib_borrow), path(r'lib/return/', views.lib_return), path(r'phone/list/', views.phone_list, name='phone_list') views.py代码如下 def phone_list(request): data_dict = {} value = request.GET.get("q") if value: data_dict["Brand__contains"] = value page = int(request.GET.get('page', 1)) page_size = 10 start = (page - 1) * page_size end = page * page_size queryset = models.PhoneInfo.objects.filter(**data_dict)[start:end] for phone in queryset: print(phone.id, phone.Tnum, phone.DeviceName, phone.DeviceType, phone.DeviceCateGory, phone.Brand, phone.Model, phone.Market, phone.Picture, phone.Location, phone.LaunchDate, phone.IMEI, phone.SN, phone.WLANMac, phone.ArrivalDate, phone.Firmware, phone.OS, phone.OSVersion, phone.Network, phone.Operator, phone.Parameter, phone.BTVersion, phone.DeviceOwner, phone.DeviceStatus, phone.UsageStatus, phone.AssetDef, phone.AssetNum, phone.AssetValue, phone.DualSIM, phone.ExMemSupport, phone.MemSize, phone.USBVersion, phone.PortType, phone.CANSpeed, phone.MenuLink, phone.Comments) total_count = models.PhoneInfo.objects.filter(**data_dict).count() total_page_count, div = divmod(total_count, page_size) if div: total_page_count += 1 if total_page_count <= 2 * 10 + 1: start_page = 1 end_page = total_page_count else: start_page = page - 5 end_page = page + 5 page_str_list = [] for i in range(start_page, end_page + 1): if i == page: ele = '
  • {}
  • '.format(i, i) else: ele = '
  • {}
  • '.format(i, i) page_str_list.append(ele) page_string = mark_safe("".join(page_str_list)) return render(request, 'phone_list.html', {"queryset": queryset, "page_string": page_string}) models代码如下 class PhoneInfo(models.Model): Tnum = models.CharField(verbose_name='Tnum', max_length=6) DeviceName = models.CharField(verbose_name="DeviceName", max_length=50) DeviceType = models.CharField(verbose_name="DeviceType", max_length=50) DeviceCategory = models.CharField(verbose_name="DeviceCategory", max_length=50) Brand = models.CharField(verbose_name="Brand", max_length=50) Model = models.CharField(verbose_name="Model", max_length=50) Market = models.CharField(verbose_name='Market', max_length=50) Picture = models.CharField(verbose_name='Picture', max_length=50) Location = models.CharField(verbose_name='Location', max_length=50) LaunchDate = models.DateField(verbose_name='LaunchDate', blank=True, null=True) IMEI = models.CharField(verbose_name="IMEI", max_length=50) SN = models.CharField(verbose_name="SN", max_length=50) WLANMac = models.CharField(verbose_name="WLANMac", max_length=50) ArrivalDate = models.DateField(verbose_name='ArrivalDate', blank=True, null=True) Firmware = models.CharField(verbose_name="Firmware", max_length=50) OS = models.CharField(verbose_name="OS", max_length=10) OSVersion = models.CharField(verbose_name='OSVersion', max_length=10) Network = models.CharField(verbose_name='Network', max_length=10) Operator = models.CharField(verbose_name='Operator', max_length=10) Parameter = models.CharField(verbose_name="Parameter", max_length=50) BTVersion = models.CharField(verbose_name="BTVersion", max_length=5) DeviceOwner = models.CharField(verbose_name='DeviceOwner', max_length=50) DeviceStatus = models.CharField(verbose_name='DeviceStatus', max_length=10) UsageStatus = models.CharField(verbose_name='UsageStatus', max_length=50) AssetDef = models.CharField(verbose_name="AssetDef", max_length=5) AssetNum = models.CharField(verbose_name="AssetNum", max_length=20) AssetValue = models.CharField(verbose_name='AssetValue', max_length=5) DualSIM = models.CharField(verbose_name='DualSIM', max_length=5) ExMemSupport = models.CharField(verbose_name="ExMemSupport", max_length=5) MemSize = models.CharField(verbose_name="MemSize", max_length=20) USBVersion = models.CharField(verbose_name='USBVersion', max_length=50) PortType = models.CharField(verbose_name='PortType', max_length=50) CANSpeed = models.CharField(verbose_name="CANSpeed", max_length=50) MenuLink = models.CharField(verbose_name='MenuLink', max_length=50) Comments = models.CharField(verbose_name='Comments', max_length=128) HTML脚本如下 {%load static %} Title {# #} 期望的结果如下,手机管理系统希望打开也是和图书管理系统类似,可以有显示,但是目前内容空 展开全部 收起 写回答 好问题 0 提建议 追加酬金 关注问题 微信扫一扫 点击复制链接 分享 邀请回答 编辑 收藏 删除 结题 收藏 举报 追加酬金 (90%的用户在追加酬金后获得了解决方案) 当前问题酬金 ¥ 0 (可追加 ¥500) ¥ 15¥ 20¥ 50¥ 100¥ 200 支付方式 扫码支付 二维码出错 点击刷新 支付金额 15 元 提供问题酬金的用户不参与问题酬金结算和分配 支付即为同意 《付费问题酬金结算规则》 结题 再想想 删除 再等等

    5条回答 默认 最新

    • 专家-赤兔[在线] 全栈领域优质创作者 2024-05-07 09:25
      关注

      引自免费微信小程序:皆我百晓生

      看起来您的项目结构、URL配置、视图函数以及HTML模板都没有明显错误。为了解决问题,我们可以从以下几个方面排查:

      1. 确保数据库中有数据。
      2. 检查模型字段是否正确映射到HTML模板中的变量。
      3. 确认查询结果是否正确传递给模板。

      首先,确保您在MySQL数据库中已经添加了一些PhoneInfo对象。您可以使用Navicat或其他工具查看数据。

      接下来,检查视图函数phone_list(),确保它正在获取正确的数据并将其传递给模板。您可以尝试将查询结果打印到控制台,看看是否有数据返回:

      def phone_list(request):
          ...
          queryset = models.PhoneInfo.objects.filter(**data_dict)[start:end]
          
          # 打印查询结果以确认是否有数据
          print(queryset)
      
          for phone in queryset:
              ...
      
          ...
      

      然后,在浏览器开发者工具的网络面板中,检查请求响应的数据是否包含预期的数据。这可以通过访问http://your_domain/phone/list/?page=1这样的URL来完成。确保响应体包含了电话设备的信息。

      如果以上步骤都正常,那么问题可能在于HTML模板。为了进一步排查,可以简化模板,仅显示数据列表的一部分,例如只显示DeviceName字段,以确认数据是否成功渲染:

      {% for phone in queryset %}
          

      {{ phone.DeviceName }}

      {% endfor %}

      如果仍然没有数据显示,那可能是CSS样式或Bootstrap的问题导致表格不可见。确保静态文件路径设置正确,并且在浏览器中检查元素以确保表格元素存在并且没有被隐藏。

      如果您仍然遇到问题,请提供更详细的反馈,比如是否有错误消息,或者检查上述建议后是否有任何变化。这样我们才能继续深入排查。

      展开全部

      评论 编辑记录
    • 码农阿豪 Java领域优质创作者 2024-05-07 09:25
      关注
      让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
      问题分析: 根据提供的代码和描述,无法得知该页面的html代码,不知道前端代码是否存在问题。但从问题描述来看,可能存在以下问题:
      1. 数据库是否连接成功?
      2. 数据是否成功传输到页面?
      3. 是否存在数据筛选或其他操作未生效导致页面无数据? 解决方案:
      4. 确认数据库是否连接成功,可以在views.py中添加print检查是否能正确获取到数据。
      5. 确认数据是否成功传输到页面,可以在html页面中添加{{queryset}}变量打印查看是否正常显示数据。
      6. 根据views.py中的代码,存在数据筛选等操作,可以确认相关操作是否正确。可以尝试移除筛选等操作,直接获取全部数据,看是否能正常显示数据。 下面提供一个简单的html模板作为参考:
      {% extends 'base.html' %}
      {% block content %}
      
      {% for phone in queryset %} {% endfor %}
      Tnum DeviceName DeviceType DeviceCategory Brand Model
      {{ phone.Tnum }} {{ phone.DeviceName }} {{ phone.DeviceType }} {{ phone.DeviceCategory }} {{ phone.Brand }} {{ phone.Model }}
        {{ page_string }}
      {% endblock %}

      其中,{{request.GET.q}}表示搜索框中的输入值,{{queryset}}表示从views.py中传递过来的数据,{{page_string}}表示分页的页面字符串。其中,page_string的生成方式已经在views.py中提供,因此不再赘述。 在html中添加样式需要添加CSS文件,可在head标签中添加如下代码:

      
          phone list
          
          
      
      

      其中,css文件需要在static文件夹中提前准备好。如果涉及到使用Bootstrap等框架,也需要在head标签中引入对应的css文件。 代码参考:

      def phone_list(request):
          data_dict = {}
          value = request.GET.get("q")
          if value:
              data_dict["Brand__contains"] = value
          page = int(request.GET.get('page', 1))
          page_size = 10
          start = (page - 1) * page_size
          end = page * page_size
          queryset = models.PhoneInfo.objects.filter(**data_dict)[start:end]
          print(queryset)  # 确认是否成功获取到数据
          total_count = models.PhoneInfo.objects.filter(**data_dict).count()
          total_page_count, div = divmod(total_count, page_size)
          if div:
              total_page_count += 1
          if total_page_count <= 2 * 10 + 1:
              start_page = 1
              end_page = total_page_count
          else:
              start_page = page - 5
              end_page = page + 5
          page_str_list = []
          for i in range(start_page, end_page + 1):
              if i == page:
                  ele = '
    • {}
    • '.format(i, i) else: ele = '
    • {}
    • '.format(i, i) page_str_list.append(ele) page_string = mark_safe("".join(page_str_list)) return render(request, 'phone_list.html', {"queryset": queryset, "page_string": page_string})

      展开全部

      评论
    • Kwan的解忧杂货铺 2024-05-07 09:25
      关注

      上午好☀️☀️☀️️
      本答案参考ChatGPT-3.5

      问题分析:根据提供的代码,我们可以发现在views.py中写了一个名为phone_list的函数,该函数采用django的ORM操作数据库,获取手机信息的列表,并且在翻页时分页显示。在该函数中使用render方法,render方法用于将一个给定的模板与响应上下文合并,并返回HTTPResponse对象来呈现给用户。即该函数是将查询到的数据通过HTML标签呈现给用户。

      根据所提供的代码,数据无法在前端(浏览器)显示,这两个区域很可能存在问题:

      1.后端(函数部分):检查函数代码中传递给模板的量,以及数据类型是否正确。

      2.前端(HTML):检查HTML代码中是否有语法错误、变量名是否正确等。

      解决方案:

      1.后端检查:

      1.1 检查函数的参数,确保其是request类型的参数。

      1.2 检查查询方法是否正确无误。

      1.3 检查render方法中的参数是否正确。

      1.4 是否导入了相应的包。

      1.5 查看是否有语法错误以及数据类型是否正确

      2.前端检查:

      2.1 HTML代码中检查语法错误,变量名是否正确。

      2.2 检查静态CSS文件路径是否正确。

      2.3 检查动态生成的标签是否符合HTML语法标准。

      2.4 确认页面已经加载完成

      查找问题时建议采用以下逐个排查的方式,可以逐一检查,找到问题。首先,在views.py中小心查看,特别是页面和返回URL的方法;其次,检查模板是否有任何问题;最后,在静态文件方面查找问题。

      修改后的代码:

      def phone_list(request): data_dict = {} value = request.GET.get("q") if value: data_dict["Brand__contains"] = value page = int(request.GET.get('page', 1)) page_size = 10 start = (page - 1) * page_size end = page * page_size queryset = models.PhoneInfo.objects.filter(**data_dict)[start:end] total_count = models.PhoneInfo.objects.filter(**data_dict).count() total_page_count, div = divmod(total_count, page_size) if div: total_page_count += 1

      if total_page_count <= 2 * 10 + 1:
          start_page = 1
          end_page = total_page_count
      else:
          start_page = page - 5
          end_page = page + 5
      
      page_str_list = []
      for i in range(start_page, end_page + 1):
          if i == page:
              ele = '
    • {}
    • '.format(i, i) else: ele = '
    • {}
    • '.format(i, i) page_str_list.append(ele) page_string = mark_safe("".join(page_str_list)) return render(request, 'phone_list.html', {"queryset": queryset, "page_string": page_string})

      HTML文件代码示例:

      {% extends "base.html" %} {% block content %} {% if queryset %}

      TnumDeviceNameDeviceTypeBrandModelOSVersionDeviceStatusUsageStatusAssetNumAction
                      
                      {% for phone in queryset %}
                          
                              {{ phone.Tnum }}
                              {{ phone.DeviceName }}
                              {{ phone.DeviceType }}
                              {{ phone.Brand }}
                              {{ phone.Model }}
                              {{ phone.OSVersion }}
                              {{ phone.DeviceStatus }}
                              {{ phone.UsageStatus }}
                              {{ phone.AssetNum }}
                              
                                  {% if phone.UsageStatus == "使用中" %}
                                      归还
                                  {% else %}
                                      借出
                                  {% endif %}
                              
                          
                      {% endfor %}
                      
                  
      
                  
              {% else %}
                  

      没有数据

      {% endif %}

      {% endblock %}

      {% block js %} {% endblock %}

      展开全部

      评论

      如果接口代码,前端代码,数据库都有,可以站内信联系我。

      回复
    • GISer Liu 2024-05-07 09:26
      关注

      该回答引用自GPT-3.5,由博主GISer Liu编写:

      首先,根据您提供的代码和描述,问题可能出现在以下几个方面:

      1. 模型字段名与视图中的字段名不一致: 您的模型字段中有DeviceCateGory,但在视图中使用的是phone.DeviceCategory,这可能导致数据在视图中无法正确获取。
      2. 模板中未正确渲染数据: 在您的视图中,您将查询集传递给了模板,但是在模板中未正确渲染数据。您需要确保模板中有正确的循环来遍历数据并显示在页面上。
        为了解决这个问题,您可以按照以下步骤进行:

        解决思路与方案:

        1. 确保模型字段名与视图中的字段名一致:

        在您的模型 PhoneInfo 中,确保字段名与视图中使用的字段名一致。比如,将 DeviceCateGory 修改为
        DeviceCategory
        python
        Copy code
        class PhoneInfo(models.Model):
        # 其他字段...
        DeviceCategory = models.CharField(verbose_name="DeviceCategory", max_length=50)
        

        2. 确保模板正确渲染数据:

        在您的模板 phone_list.html 中,使用模板语法正确渲染数据。您需要在模板中使用适当的 HTML 结构和模板标签来显示数据。
        html
        Copy code
        {% for phone in queryset %}
        <div>
        <p>{{ phone.id }}p>
        
        div>
        {% endfor %}
        

        3. 调试数据获取问题:

        如果仍然无法显示数据,您可以在视图中添加一些调试语句,确保数据能够正确获取。比如,在视图中添加 ``` print(queryset)
        python
        Copy code
        
        print(queryset)
        for phone in queryset:
        print(phone.id, phone.Tnum, phone.DeviceName, ...)
        ### 代码大纲:
        基于以上解决思路,您可以尝试以下修改:
        #### 模型修改:
        python
        Copy code
        

        models.py

        class PhoneInfo(models.Model):

        其他字段...

        DeviceCategory = models.CharField(verbose_name="DeviceCategory", max_length=50)
        #### 视图调整:
        python
        Copy code
        

        views.py

        def phone_list(request):

        其他代码...

        queryset = models.PhoneInfo.objects.filter(**data_dict)[start:end]
        print(queryset) # 添加调试语句,确保数据能够正确获取

        其他代码...

        #### 模板修改:
        html
        Copy code
        
        {% for phone in queryset %}

        {{ phone.id }}

        {% endfor %} ``` 以上修改应该能够帮助您解决网页无法显示数据库信息的问题。如果还有其他疑问或者问题,欢迎随时提出。

      如果该回答解决了您的问题,请采纳!如果没有,请私信联系或评论您的疑惑

      展开全部

      评论
    • DTcode7 前端领域优质创作者 2024-05-16 03:43
      关注

      答案引用自chatgpt生成,望对题主有所帮助/启发;若有帮助,还望采纳!

      这个问题可能涉及到多个方面,包括Django的视图、模板、URL配置等。以下是一些可能的解决方案:

      1. 检查视图函数:确保你在视图函数中返回了正确的HttpResponse对象。例如,你可能需要返回一个包含数据的HttpResponse对象,而不是仅仅返回一个HttpResponse对象。如果你在视图函数中使用了render()函数,确保你传入了正确的模板名和上下文数据。

      2. 检查模板:确保你的模板正确地显示了数据。你可以使用Django的模板语言来访问上下文中的数据。例如,如果你的数据是一个名为"my_data"的列表,你可以在模板中使用{{ my_data }}来访问它。

      3. 检查URL配置:确保你的URL配置正确地指向了你的视图函数。在Django中,你需要在urls.py文件中定义URL模式,并将它们映射到相应的视图函数。

      4. 检查数据库查询:确保你的数据库查询是正确的。你可以使用Django的ORM来查询数据库。例如,如果你有一个名为MyModel的模型,并且你想获取所有的对象,你可以使用MyModel.objects.all()来查询。

      5. 检查前端代码:确保你的前端代码正确地显示了数据。如果你使用的是JavaScript或者AJAX来获取数据,你需要确保你的代码能够正确地处理返回的数据。

      如果以上都检查过了,还是有问题,建议开启Django的调试模式,查看详细的错误信息。在settings.py文件中,将DEBUG设置为True,然后刷新页面,你会看到详细的错误信息,这将有助于你找到问题所在。

      评论
    编辑
    预览

    报告相同问题?

  • 相关阅读:
    p5.js 写个连连看
    MySQL数据库主从同步,一致性解决方案
    t-sne 数据可视化网络中的部分参数+
    Spring Security是什么?(一)
    蓝桥杯单片机快速开发笔记——独立键盘
    全开源无加密跨境电商购物网站系统源码(无货源模式+多语言+多货币)
    【Python】-- 模块、包(导入模块、自定义模块、自定义包、安装第三方包)
    Docker镜像打包示例
    从统计语言模型到预训练语言模型---统计语言模型
    Redis的数据结构之bitmap
  • 原文地址:https://ask.csdn.net/questions/8099654