Django开发社交分享按钮报QuerySet无info属性错误如何解决
错误原因
movie.objects.filter(urltitle=title)返回的是Django查询集(QuerySet)对象,属于多个模型实例的集合,不存在info属性,只有单个movie模型实例才有你定义的info字段,所以调用ttt.info会抛出属性不存在的错误。
修复步骤
- 先修正后端的模型查询逻辑:
如果你确认urltitle是唯一字段(模型中配置了unique=True),直接用get()获取单个实例即可,建议搭配get_object_or_404处理无匹配项的404场景:
from urllib.parse import urlencode, quote_plus from django.shortcuts import get_object_or_404 def ttt_read(request, title): ttt = get_object_or_404(movie, urltitle=title) share_string = quote_plus(ttt.info) if request.method == 'POST': form = Commentform(request.POST) if form.is_valid(): form.save() messages.success(request, 'Thank You For Your Comment') else: form = Commentform() return render(request, 'ttt_read.html',{'ttt':ttt,'form':form,'share_string':share_string})
如果urltitle允许重复,只需取第一个匹配的实例,修改查询代码即可:
ttt = movie.objects.filter(urltitle=title).first() if ttt: share_string = quote_plus(ttt.info) else: # 无匹配实例时设置默认分享文本 share_string = quote_plus("默认分享内容")
- 对应修改前端分享链接,直接填入已经编码完成的
share_string即可:
<a class="i-links" target="_blank" href="https://twitter.com/home?status={{ share_string }}%20{{ request.build_absolute_uri }}">
内容的提问来源于stack exchange,提问作者Shreyash mishra
相关产品推荐
相关产品推荐

