Django中提交的模型对象后台可见但前端表格不显示如何解决
问题根因
- 渲染首页的
index视图未查询Kommentar评论表数据,仅向模板传递了文献列表literatur,模板无法获取评论数据源。 - 模板中遍历评论使用的变量为
kommentar,视图未传递该变量时Django模板会默认将其解析为空值,因此表格无内容渲染。 - 模板用户名单元格存在多余的
</a>闭合标签,属于无效HTML,不影响核心数据加载但会导致页面结构异常。
修复方案
1. 修改视图层,补充评论数据查询与传递
打开views.py,修改index函数,新增评论查询逻辑,将评论数据集加入模板上下文:
def index(request): if 'q' in request.GET: q = request.GET['q'] multiple_q = Q(Q(name__icontains=q) | Q(autor__icontains=q) | Q(jahr__icontains=q) | Q(auflage__icontains=q) | Q(verlag__icontains=q) | Q(ort__icontains=q) | Q(isbn__icontains=q)) literatur = Literatur.objects.filter(multiple_q) else: literatur = Literatur.objects.all() # 查询全部评论数据 kommentar = Kommentar.objects.all() # 将评论数据传入模板上下文 return render(request, "literatur/index.html", {"literatur": literatur, "kommentar": kommentar})
2. 修复模板层无效标签
打开index.html,删除用户名单元格多余的</a>标签,修正后的表格代码如下:
<table class="table"> <thead class="thead-dark"> <tr><th scope="col">Username</th><th scope="col">Kommentar</th></tr> {% for i in kommentar %} <tr> <td>{{i.user}}</td> <td>{{i.comment}}</td> </tr> {% endfor %} </table>
可选优化(按提交时间排序评论)
如果需要最新提交的评论展示在最前面,可以给Kommentar模型新增自动记录创建时间的字段:
class Kommentar(models.Model): user = models.CharField(max_length=25) comment = models.CharField(max_length=250) created_at = models.DateTimeField(auto_now_add=True) def __str__(self): return f"{self.user} {self.comment}"
修改模型后依次执行以下命令同步数据库结构:python manage.py makemigrationspython manage.py migrate
再将视图中查询评论的代码调整为按创建时间倒序:kommentar = Kommentar.objects.all().order_by('-created_at')
修改完成后重启Django服务,刷新首页即可正常看到提交的评论内容。
内容的提问来源于stack exchange,提问作者Melo
相关产品推荐
相关产品推荐

