因此,我一直无法将此视图转换为Ajax调用:
def公司单(请求,slug):
company=get\u object\u或\u 404(CompanyProfile,slug=slug)
company\u list=CompanyProfile.objects.get(slug=slug)
尝试:
tcompany=CompanyLikes.objects.get(company=company\u list)
总喜欢度=t公司喜欢度
user\u=CompanyLikes.objects.get(user=request.user)
除:
总数=0
实例,created=CompanyLikes.objects.get\u或\u create(company=company\u list)
likes\u form=CompanyLikesForm(request.POST或None,instance=instance)
如果喜欢表单。表单有效吗()
this=likes\u form.save(commit=False)
尝试:
如果用户喜欢:
这个。喜欢-=1
this.user.remove(request.user)
除:
this.user.add(request.user)
这个是+1
这个。save()
返回render_to_响应('company.html',locals(),context_实例=RequestContext(request))
我想我需要jQuery和JSON,但我不确定如何在这里实现它,以便为我的站点创建自己的“喜欢的按钮”。有什么想法/建议吗
我给你举个例子。你只需要从中学习并做出相应的改变
myapp.models.py(简化公司模型):
来自django.db导入模型的
从django.contrib.auth.models导入用户
从django.template.defaultfilters导入slugify
公司类别(型号.型号):
name=models.CharField(最大长度=255)
slug=models.SlugField()
likes=models.ManyToManyField(用户,相关的\u name='likes')
@财产
def total_likes(自我):
"""
我喜欢这家公司
:return:Integer:公司的喜好
"""
return self.likes.count()
def保存(自身、*args、**kwargs):
self.slug=slugify(self.name)
超级(公司,自我)。保存(*args,**kwargs)
myapp.URL.py(视图的URL):
url(r'^like/$,'myapp.views.like',name='like'),
myapp.views.py(视图):
django.http导入HttpResponse中的
尝试:
从django.utils将simplejson导入为json
除恐怖外:
导入json
从django.shortcuts导入获取对象或404
从django.contrib.auth.decorators导入所需的登录名
从django.views.decorators.http导入需要\u POST
来自myapp.models进口公司
@需要登录
@需要职位
def like(请求):
如果request.method==“POST”:
user=request.user
slug=request.POST.get('slug',None)
公司=获取对象或404(公司,slug=slug)
如果company.likes.filter(id=user.id).exists():
#用户已经喜欢上了这家公司
#删除类/用户
company.likes.remove(用户)
message='您不喜欢这个'
其他:
#为公司添加一个新的相似项
company.likes.add(用户)
message='你喜欢这个'
ctx={'likes\u count':company.total\u likes,'message':message}
#如果django<;5.
返回HttpResponse(json.dumps(ctx),content_type='application/json')
模板:
<;输入type=“button”id=“like”name=“{{company\u slug}}”value=“like”/>;
<;脚本>;
$('#like')。单击(函数(){
$.ajax({
类型:“POST”,
url:“{%url'类似“%}”,
数据:{'slug':$(this.attr('name'),'csrfmiddlewaretoken':{{{csrf_token}}},
数据类型:“json”,
成功:功能(响应){
警报(response.message);
警报(“公司喜欢计数现在是”+响应。喜欢计数);
},
错误:函数(rs,e){
警报(rs.responseText);
}
});
})
</脚本>;
有关在模板中使用url标记的一些说明:
- 如果
Django<;1.3使用url标记,url名称周围不带引号,如下{%url like%} - 如果
Django>;1.3及<;1.5然后您应该在模板的顶层添加{%loadurl from future%},并用引号括起您的url名称,就像我在回答中所做的那样 - 如果
Django>;=1.5然后只需删除{%loadurl from future%},并将带有引号的url名称括起来,如{%loadurl from future%}标记为已弃用,并将在Django 1.9中删除