gpt4 book ai didi

jquery - 我自己的点赞按钮: Django + Ajax -- How?

转载 作者:行者123 更新时间:2023-12-03 22:12:28 24 4
gpt4 key购买 nike

所以我一直无法将此 View 转换为 Ajax 调用:

def company_single(request, slug):
company = get_object_or_404(CompanyProfile, slug=slug)
company_list = CompanyProfile.objects.get(slug=slug)

try:
tcompany = CompanyLikes.objects.get(company=company_list)
total_likes = tcompany.likes
user_liked = CompanyLikes.objects.get(user=request.user)
except:
total_likes = 0


instance, created = CompanyLikes.objects.get_or_create(company=company_list)
likes_form = CompanyLikesForm(request.POST or None, instance=instance)

if likes_form.is_valid():
this = likes_form.save(commit=False)
try:
if user_liked:
this.likes -=1
this.user.remove(request.user)
except:
this.user.add(request.user)
this.likes += 1
this.save()

return render_to_response('company.html', locals(), context_instance=RequestContext(request))

我认为我需要 jQuery 和 JSON,但我不确定如何在这里实现它来为我的网站制作我自己的“点赞按钮”。有什么想法/建议吗?

最佳答案

我给你举个例子。您只需从中学习并做出相应的改变即可。

myapp.models.py(简化的公司模型):

from django.db import models
from django.contrib.auth.models import User
from django.template.defaultfilters import slugify


class Company(models.Model):
name = models.CharField(max_length=255)
slug = models.SlugField()
likes = models.ManyToManyField(User, related_name='likes')

@property
def total_likes(self):
"""
Likes for the company
:return: Integer: Likes for the company
"""
return self.likes.count()

def save(self, *args, **kwargs):
self.slug = slugify(self.name)
super(Company, self).save(*args, **kwargs)

myapp.urls.py( View 的 URL):

url(r'^like/$', 'myapp.views.like', name='like'),

myapp.views.py( View ):

from django.http import HttpResponse
try:
from django.utils import simplejson as json
except ImportError:
import json
from django.shortcuts import get_object_or_404
from django.contrib.auth.decorators import login_required
from django.views.decorators.http import require_POST

from myapp.models import Company


@login_required
@require_POST
def like(request):
if request.method == 'POST':
user = request.user
slug = request.POST.get('slug', None)
company = get_object_or_404(Company, slug=slug)

if company.likes.filter(id=user.id).exists():
# user has already liked this company
# remove like/user
company.likes.remove(user)
message = 'You disliked this'
else:
# add a new like for a company
company.likes.add(user)
message = 'You liked this'

ctx = {'likes_count': company.total_likes, 'message': message}
# use mimetype instead of content_type if django < 5
return HttpResponse(json.dumps(ctx), content_type='application/json')

模板:

<input type="button" id="like" name="{{ company_slug }}" value="Like" />

<script>
$('#like').click(function(){
$.ajax({
type: "POST",
url: "{% url 'like' %}",
data: {'slug': $(this).attr('name'), 'csrfmiddlewaretoken': '{{ csrf_token }}'},
dataType: "json",
success: function(response) {
alert(response.message);
alert('Company likes count is now ' + response.likes_count);
},
error: function(rs, e) {
alert(rs.responseText);
}
});
})
</script>

使用 url 的一些说明模板中的标签:

  • 如果Django < 1.3使用url URL 名称周围不带引号的标记,如下所示 {% url like %}
  • 如果Django > 1.3 and < 1.5那么你应该添加 {% load url from future %} at top level of your template and enclosed your URL name with quotes as I have done in my answer
  • 如果Django >= 1.5然后只需删除 {% load url from future %}并用引号括起来的 URL 名称为 {% load url from future %}被标记为已弃用并将在 Django 1.9 中删除

关于jquery - 我自己的点赞按钮: Django + Ajax -- How?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14007453/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com