У меня есть простая запись, например, кнопка переключения, где пользователь может like
опубликовать сообщение.Работает нормально, без добавления методов jQuery и Ajax.Однако мне нужно добавить Ajax для удаления обновления страницы.Ниже мой код, добавляющий Ajax и jQuery.Что я делаю не так?
Я добавил ошибку внизу, Там написано
Получен неожиданный аргумент ключевого слова 'username'
Какя могу это исправить?
мои модели
class Post(models.Model):
user = models.ForeignKey(User, related_name='posts')
title = models.CharField(max_length=250, unique=True)
slug = models.SlugField()
message = models.TextField()
likes = models.ManyToManyField(User, blank=True, related_name='post_likes')
def get_api_like_url(self):
return reverse('posts:like_api', kwargs={'username': self.user.username,
'slug': self.slug})
def get_absolute_url(self):
return reverse('posts:single', kwargs={'username': self.user.username,
'slug': self.slug})
def get_like_url(self):
return reverse('posts:like', kwargs={'username': self.user.username,
'slug': self.slug})
Мои взгляды
class PostLikeAPIToggle(APIView):
authentication_classes = (authentication.SessionAuthentication,)
permission_classes = (permissions.IsAuthenticated,)
def get(self, request, slug=None, format=None):
obj = get_object_or_404(Post, slug=slug)
url_ = obj.get_absolute_url()
user = self.request.user
if user.is_authenticated():
if user in obj.likes.all():
obj.likes.remove(user)
liked = False
else:
obj.likes.add(user)
liked = True
data = {
"post": obj,
"liked": liked,
"total_likes": obj.likes.all()
}
return Response(data)
В моем шаблоне у меня есть следующий код
<script>
$(document).ready(function () {
$(".like-btn").click(function (e) {
e.preventDefault();
var this_ = $(this);
var likeUrl = this_.attr("data-href");
$.ajax({
url : likeUrl,
method: "GET",
data: {},
success: function (data) {
console.log(data);
// $("#like-section").html(response)
}, error: function (error) {
console.log("error");
console.log(error);
}
})
})
})
</script>
<div class="text-center">
{% if user in post.likes.all %}
<a class="like-btn" data-href="{{post.get_api_like_url}}" href="{{post.get_like_url}}">
<img src="{% static 'images/HEART.RED.png' %}" height="25px">
</a><br/>
{% else %}
<!--<a href=""><img src="{% static 'images/HEART.png' %}" height="25px"></a><br/>-->
<a class="like-btn" data-href="{{post.get_api_like_url}}" href="{{post.get_like_url}}">
<img src="{% static 'images/HEART.png' %}" height="25px">
</a><br/>
{% endif %}
Ниже приведен мой URL для вызова кнопки «Мне нравится»
url(r'^(?P<username>[-\w]+)/(?P<slug>[-\w]+)/like_api/$', views.PostLikeAPIToggle.as_view(), name='like_api'),
Ниже приведена ошибка, которую я получаю
responseText: «TypeError at / posts / charlize / singes-boat-new-york / like_api \ nget () получил неожиданный аргумент ключевого слова 'username' \ n \ nRequest Метод: GET \ nRequest URL: