Django模板调用模型自定义snippet方法无内容输出如何解决
问题根因
你的模板文件中调用模型方法的语法存在错误:
你当前写的{{article.body.snippet}}是尝试访问article的body字段(字符串类型)下的snippet属性,而snippet是定义在Article模型上的方法,并非字符串的属性。Django模板渲染时遇到不存在的属性/方法会默认返回空字符串,所以没有内容显示也不会抛出报错。
解决方法
把articles_list.html中对应的行替换为以下代码即可:
<p>{{article.snippet}}</p>
Django模板中调用无参数的模型实例方法时,不需要额外加括号,直接写方法名就会自动执行并返回结果。
可选排查步骤(如果修改后仍有问题)
- 重启Django开发服务器:修改模型层代码后需要重启服务才能生效,避免运行的还是旧版本代码
- 验证后端方法有效性:可以在视图的
articles_list函数中添加打印代码,在控制台确认方法执行正常:def articles_list(request): articles = Article.objects.all() # 新增打印行,看后台是否输出各个文章的截断内容 print([art.snippet() for art in articles]) return render(request, 'articles/articles_list.html', {'articles': articles}) - 临时替代方案:也可以直接用Django内置的模板过滤器实现同样的截断效果,不需要依赖自定义模型方法:
<p>{{article.body|slice:":50"}}</p>
内容的提问来源于stack exchange,提问作者ABHILASH NAIR
相关产品推荐
相关产品推荐

