这是我的代码:
models.py
class Photos(models.Model):
username = models.CharField(max_length=50)
caption = models.CharField(max_length=150, blank=True, null=True)
img = models.ImageField(upload_to = 'userProfile/static/img', null=True, blank=True)
update_date = models.DateTimeField(default=timezone.now)
category = models.CharField(max_length=50, blank=True, null=True)
likes_count = models.IntegerField(blank=True, null=True)
class Meta:
managed = False
db_table = 'photos'
这是我的js代码生成的html代码的一部分
<div class="container_card">
<img class="container_card_image" onclick="..." src="/static/img/1/uploads/img1.jpg">
</div>
我希望当您点击图片时,'likes_count'会在不刷新页面的情况下递增(例如Instagram或类似于所有社交网络)。
然后,如果我使用<a href="{% url 'like' value=user.id %}> <img ...> </a>
和以这种方式定义的视图,它会增加likes_count但不好,因为它会为每次点击重新填充页面
urls.py
urlpatterns = [
...
url(r'^(?P<value>\w+)$', views.like, name='like'),
]
views.py
def like(request, value):
photo = Photos.objects.get(pk=value)
photo.likes_count += 1
photo.save()
return redirect('home')
有没有办法得到我想要的东西?
答案 0 :(得分:0)
为了得到你想要的东西,你需要使用ajax。 例如,jquery非常简单,易于发出ajax请求并处理响应。 https://api.jquery.com/jquery.get/
$.post( "photo/15/like", function( data ) {
// here you handle the response.
});
此外,您的django视图不应该将您重定向到另一个页面,因为这将导致整个页面刷新。相反,你应该使用JsonReponse
def get(self, request, *args, **kwargs):
photo = Photos.objects.get(pk=value)
photo.likes_count += 1
photo.save()
return JsonResponse({'action': 'success'}, safe=False)
更进一步,您可以使用整个框架来处理像http://www.django-rest-framework.org/这样的json响应,并且为了编写更少的代码,可以使用一些基于类的视图http://www.cdrf.co/