You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Django项目的index.html页面中接收来自admin管理后台的对象数据

问题根因

  • 命名冲突:视图函数名home与模型类名home完全重名,执行home.objects.all()时程序会将home识别为视图函数而非模型类,无法正常查询数据库中的数据
  • 模型缺少__str__方法:即便成功拿到数据,模板中直接输出{{ home }}只会显示默认的home object (序号)格式内容,无法展示你存入的实际字段值
  • 不符合Django开发规范:模型类默认要求使用大驼峰命名,小写开头的类名极易和普通变量、函数产生命名冲突

修复步骤

  1. 修正models.py:将模型类改为大驼峰命名,新增__str__方法定义实例默认显示内容
from django.db import models

class Home(models.Model):
    HOME_CATEGORY = [
        ('SR', 'Service'),
        ('VL', 'Vlog'),
        ('CR', 'course'),
    ]
    title = models.CharField(max_length=120)
    description = models.TextField()
    image = models.ImageField(upload_to='images')
    home_category = models.CharField(max_length=2, choices=HOME_CATEGORY)

    # 定义实例默认返回的内容
    def __str__(self):
        return self.title
  1. 执行模型迁移命令,同步数据库结构
python manage.py makemigrations
python manage.py migrate

如果admin后台注册了该模型,需要同步修改admin.py中注册的模型类名为Home,保证后台可正常使用

  1. 修正views.py:修改导入的模型类名,建议同步修改视图函数名避免后续命名冲突
from django.shortcuts import render
from .models import Home

# 视图函数名改为index,避免和模型名混淆
def index(request):
    homeobject = Home.objects.all()
    return render(request, 'index.html', {'homes': homeobject})

修改完视图函数名后,需要同步修改项目urls.py中对应的路由指向,将原指向views.home的配置改为views.index

  1. 修正index.html:直接调用需要展示的字段,可新增empty块快速排查是否成功拿到数据
{% for home in homes %}
  <h3>{{ home.title }}</h3>
  <p>{{ home.description }}</p>
  <p>分类:{{ home.get_home_category_display }}</p>
  <img src="{{ home.image.url }}" alt="{{ home.title }}">
{% empty %}
  <p>未查询到对应数据</p>
{% endfor %}

get_home_category_display是Django自带的方法,可直接输出choices配置中对应的展示值,而非存储的简写字符


内容的提问来源于stack exchange,提问作者Ashok shah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 22:30:01