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

Django模板无法解析Django代码,新手求助数据库数据提取问题

解决Django新手的两个模板问题:标签不解析+无法提取数据库数据

嘿,作为刚接触Django的新手,遇到这俩问题太正常了!我帮你一步步排查解决~

先解决第一个问题:模板里的Django代码不解析

你的模板代码有个明显的小错误,再加上几个容易忽略的配置点,咱们逐个修正:

1. 修复无效的HTML标签

你写的<h>{{book.name }}</h>里的<h>是不合法的HTML标签,浏览器根本无法识别,得改成<h1>、<h2>这类标准标题标签,比如改成<h2>{{ book.name }}</h2>。

2. 确认模板加载配置

  • 打开mysite/settings.py,检查INSTALLED_APPS里有没有添加'books',Django只有识别到你的应用,才会去它的templates文件夹查找模板:
    INSTALLED_APPS = [
        # 其他默认应用...
        'books',  # 必须加上这一行
    ]
    
  • 再看TEMPLATES配置里的APP_DIRS是否为True,确保Django会自动搜索每个应用下的templates目录:
    TEMPLATES = [
        {
            # 其他配置...
            'APP_DIRS': True,
        },
    ]
    

3. 补全视图的template_name配置

你的IndexView里template_name =...没写完,得填完整的路径'books/index.html',这样Django才能精准定位到模板文件。


再解决第二个问题:无法从数据库提取数据

这个主要是ListView的配置没到位,再加上数据库数据的检查:

1. 给ListView指定要查询的模型

继承generic.ListView后,必须明确告诉它要从哪个模型取数据,也就是加上model = Book,不然它不知道要查询什么,object_list自然是空的。修正后的views.py应该是这样:

# mysite/books/views.py
from django.views import generic
from .models import Book

class IndexView(generic.ListView):
    model = Book  # 关键!指定要查询的Book模型
    template_name = 'books/index.html'  # 完整的模板路径
    # 可选:如果想把模板里的object_list改成更直观的名字(比如books),可以加这行
    # context_object_name = 'books'

2. 确认数据库里有数据

  • 先确保你已经执行了数据库迁移:在终端运行python manage.py makemigrations和python manage.py migrate,创建Book模型对应的数据库表。
  • 可以通过Django admin或者终端的python manage.py shell添加几条测试数据,比如:
    from books.models import Book
    Book.objects.create(name='Django入门指南')
    

3. 给模板加空列表提示(方便调试)

在for循环里加个{% empty %}分支,这样如果数据库里没数据,你能立刻知道问题出在哪,而不是误以为模板没解析:

<!-- mysite/books/templates/books/index.html -->
<!DOCTYPE html>
<html>
<head>
    <title>我的书单</title>
</head>
<body>
    {% for book in object_list %}
        <h2>{{ book.name }}</h2>
    {% empty %}
        <p>数据库里还没有书籍哦~</p>
    {% endfor %}
</body>
</html>

最后别忘了检查URL配置

得把IndexView映射到某个URL,不然访问的时候根本不会触发这个视图。打开mysite/urls.py,添加对应的路径:

from django.contrib import admin
from django.urls import path
from books.views import IndexView

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', IndexView.as_view(), name='index'),  # 把首页映射到IndexView
]

现在重启你的Django服务器,再访问页面试试,应该就能正常显示数据库里的书籍了!

内容的提问来源于stack exchange,提问作者Sushant Garg

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:33:48