Django点击博客详情时get()收到意外关键字参数title如何解决
问题原因及修复方案
核心报错原因:视图类方法缩进错误
你定义的ReadBlogs类下的get方法没有正确缩进,不属于类的成员方法,Django调用类视图默认的get方法时,无法匹配你传入的title参数,直接抛出参数不匹配错误。
同时你的代码还存在另外两处问题会导致后续功能异常,同步修复即可:
1. 修正视图代码
class ReadBlogs(View): # 先修正缩进,同时修改查询字段,你传递的是urltitle的值,需要按urltitle字段查询 def get(self, request, title): # 原代码filter(title=title)是用普通标题字段匹配slug值,无法查到对应内容 readblog = Blog.objects.filter(urltitle=title) return render(request,'blogs_read.html', {'readblog':readblog})
优化建议:因为
urltitle是唯一约束的SlugField,你可以直接用get方法查询单条对象,不需要后续模板循环:readblog = Blog.objects.get(urltitle=title)
2. 修正详情页模板变量错误
你在模板中循环变量命名为blog,取值时错误写为read,变量名不匹配会触发变量不存在错误:
<div class="col-11 card"> <div class="blogs"> {% for blog in readblog %} <!-- 原{{read.title}}改为{{blog.title}} --> <h1 class="text-center" style="color: #025; font-family:cursive; margin-top:20px;">{{blog.title}}</h1> {% endfor %} </div> </div>
如果你用了上面的
get方法查询单条对象,可以直接去掉for循环,直接写{{readblog.title}}即可。
内容的提问来源于stack exchange,提问作者Shreyash mishra
相关产品推荐
相关产品推荐

