Django通过slug获取模型实例后无法在模板渲染属性的问题
问题根因
视图函数中传递给模板的context字典键值对写反了。
Django的render函数上下文传参规则为:字典的键是模板中可直接调用的变量名称,字典的值是需要传递给模板的实际数据。你当前写法{details: 'details'}是把查询到的文章实例作为字典键,把字符串'details'作为传递值,模板中自然找不到名为details的实例变量,无法读取属性。
修复方案
修改views.py中上下文的键值对应关系即可:
def post_details(request, slug): details = get_object_or_404(article, slug=slug) context = { 'details': details } return render(request, 'post_details.html', context)
可选规范优化
- 按照Python编码规范,模型类名建议使用大驼峰命名,可将
class article调整为class Article,避免后续开发出现命名识别问题 - 你贴出的模型代码中,字段定义没有和类保持正确缩进,实际运行会触发语法错误,记得补充缩进,参考写法:
class article(models.Model): title = models.CharField(max_length=200) content = RichTextUploadingField() slug = models.SlugField(unique=True, max_length=200) def __str__(self): return self.title
内容的提问来源于stack exchange,提问作者Hugo Yu
相关产品推荐
相关产品推荐

