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

Django无法从数据库向HTML页面获取数据问题求助

Django数据渲染无输出问题修复

问题根源

  1. 视图传递的变量名与模板中使用的变量名不匹配:视图里传的是集合数据,模板却用了未定义的变量名
  2. 视图返回的是多个对象的集合(QuerySet),模板直接访问单个对象属性会无效,需要遍历集合
  3. 模型类名不符合Python规范(建议大写开头),虽不影响运行,但易引发后续维护问题

修复后的代码

1. models.py(修正类名,符合规范)

from django.db import models

class Image(models.Model):
    name = models.CharField(max_length=100)
    img = models.ImageField(upload_to='slideshow1')

2. admin.py(同步模型类名)

from django.contrib import admin
from .models import Image

admin.site.register(Image)

3. views.py(优化变量名,保持语义清晰)

from django.shortcuts import render
from .models import Image

def slideshow1(request):
    images = Image.objects.all()
    return render(request, 'slideshow1.html', {'images': images})

4. urls.py(补充路由斜杠,避免访问异常)

from django.urls import path
from . import views

urlpatterns = [
    path('login/', views.login, name='login'),
    path('signup/', views.signupform, name='signup'),
    path('logout/', views.logout, name='logout'),
    path('slideshow1/', views.slideshow1, name='slideshow1'),
]

5. slideshow1.html(遍历集合,处理空数据情况)

{% load static %}
<!DOCTYPE html>
<html>
<head>
    <title>Page Title</title>
</head>
<body>
{% block content %}
    {% for img in images %}
        <h1>{{ img.name }}</h1>
        <!-- 如需显示图片,添加以下代码(需先配置媒体文件路径) -->
        <img src="{{ img.img.url }}" alt="{{ img.name }}">
    {% empty %}
        <p>暂无图片数据</p>
    {% endfor %}
{% endblock %}
</body>
</html>

额外注意事项

  • 必须通过Django后台(admin)添加至少一条Image数据,否则页面会显示"暂无图片数据"
  • 若要显示图片,需在项目settings.py中配置媒体文件路径:
    MEDIA_ROOT = BASE_DIR / 'media'
    MEDIA_URL = '/media/'
    
    并在项目根目录的urls.py中添加:
    from django.conf import settings
    from django.conf.urls.static import static
    
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
    

内容的提问来源于stack exchange,提问作者Jemesh Khatik

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 14:21:37