python django前端数据渲染

python django项目,后端想把数据传到前端,但总是无法显示,如果print一个data或者前端加个{{data}}就会出来queryset,不知道是哪里出了问题,试了一天多还是不对,请厉害的博主们帮我看看是哪里出了问题,感谢感谢

img

img

img

img

img

在Django中,将数据从后端传递到前端,通常使用模板渲染的方式。如果你的代码中使用了print语句或者在前端直接输出{{data}},可能会出现无法正确显示数据的问题。

以下是一些可能导致数据无法正确显示的常见问题和解决方法:

  1. 数据类型问题:如果传递的是QuerySet对象,需要将其转换为列表或字典等前端可以识别的数据类型。可以使用values()方法或者使用序列化工具(如json)将QuerySet转换为字典类型。
  1. 模板语法问题:在模板中使用{{}}语法时,需要保证变量名正确,且没有语法错误。
  1. 模板继承问题:如果你在使用模板继承的情况下,可能需要在子模板中使用{% block %}标签来覆盖或扩展父模板中的内容。
  1. URL配置问题:如果你使用了Django的URL路由,需要确保URL配置正确,能够正确匹配到视图函数。
  1. 视图函数问题:在视图函数中,需要确保数据已经正确获取,并且使用HttpResponse等方法将其正确传递给前端模板。

假设我们有一个Django视图函数,用于从数据库中获取一些数据,并将其传递给前端模板:

from django.shortcuts import render
from .models import Book

def book_list(request):
    books = Book.objects.all()
    return render(request, 'book_list.html', {'books': books})

在这个视图函数中,我们从数据库中获取所有的书籍信息,并将其传递给名为book_list.html的模板。在模板中,我们可以通过以下方式获取books变量并展示

{% extends 'base.html' %}

{% block content %}
    <h1>Book List</h1>
    <table>
        <thead>
            <tr>
                <th>Title</th>
                <th>Author</th>
                <th>Published Date</th>
            </tr>
        </thead>
        <tbody>
            {% for book in books %}
            <tr>
                <td>{{ book.title }}</td>
                <td>{{ book.author }}</td>
                <td>{{ book.published_date }}</td>
            </tr>
            {% endfor %}
        </tbody>
    </table>
{% endblock %}



在上面的代码中,我们通过{% for %}循环遍历books变量,并将每本书的标题、作者和出版日期显示在表格中。注意这里的books变量是从视图函数中传递过来的,所以需要保证视图函数中的变量名和模板中的变量名相同。

如果你遇到了数据无法正确显示的问题,可以先检查上面提到的常见问题和解决方法,排除问题的可能原因。如果还有问题,可以提供更多的代码和错误信息,以便更好地定位问题。

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这篇博客: Django(四):模型层Model中的 QuerySet:操作数据 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    数据操作CRUD逻辑封装到model中,不要到view中用QuerySet。

    仅仅测试一下,看看结果:python manage.py shell

    假设例子的model为:Types、PersonInfo、Vocation
    models.py:

    class Types(models.Model):
        id = models.AutoField(primary_key=True)
        firsts = models.CharField('一级类型', max_length=100)
        seconds = models.CharField('二级类型', max_length=100)
    
        def __str__(self):
            return str(self.id)
    
        class Meta:    
            verbose_name = verbose_name_plural = '商品类型'        
            
    
    class PersonInfo(models.Model):
        id = models.AutoField(primary_key=True)
        name = models.CharField(max_length=20)
        age = models.IntegerField()
        hireDate = models.DateField()
    
        def __str__(self):
                return self.name
    
        class Meta:
            verbose_name = verbose_name_plural = '人员信息'
    
    
    class Vocation(models.Model):
        id = models.AutoField(primary_key=True)
        job = models.CharField(max_length=20)
        title = models.CharField(max_length=20)
        payment = models.IntegerField(null=True, blank=True)
        name = models.ForeignKey(PersonInfo, on_delete=models.CASCADE, related_name='ps')
    
        def __str__(self):
                return str(self.id)
    
        class Meta:
            verbose_name = verbose_name_plural = '职业信息'
    

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^