Django 错误:反转'like_post',找不到参数'(,)'



完全错误:找不到参数为"('',("的"like_post"的反转。尝试了2种模式:['like/(?P[0-9]+($','home/like/(?P[0-9]+$']

views.py:

def like_post(request, pk):
post = Post.objects.get(id=pk)
liked = False
if post.likes.filter(id=request.user.id).exists():
post.likes.remove(request.user)
liked = False
else:
post.likes.add(request.user)
post.dislikes.remove(request.user)
liked = True
return HttpResponseRedirect(reverse('home-new'))

如果我把表单操作放在调用视图的url上,上面的代码就可以工作了,但当我喜欢帖子时,它会刷新页面,所以我试图通过javascript调用视图,所以我尝试了这个

模板:

{% block content %}
{% for item in products %}
<div class="item_btns_container">
<div class="like_btn_form_container">
<form id="like_form">//was action="{% url 'like_post' item.id %}"
{% csrf_token %}
{% if user in item.likes.all %}
<button type="submit" class="liked_post" name="post_id" value="{{ item.id }}"><div class="liked_btn" >Like</div></button>
{% else %}
<button type="submit" class="like_btn" name="post_id"  value="{{ item.id }}"><div class="liked_btn">Like</div></button>
{% endif %}
</form>
</div>

{% endfor %}
<script>
$(document).on('submit','#like_form',function(e){
e.preventDefault();
$.ajax({
type:'POST',
url:'{% url 'like_post' item.id %}',
<script>
$(document).on('submit','#like_form',function(e){
e.preventDefault();
$.ajax({
type:'POST',
url:'{% url 'like_post' item.id %}',
data:{
csrfmiddlewaretoken:$('input[name=csrfmiddlewaretoken]').val()
},
success:function(){
alert("liked");
}
});
});
</script>
success:function(){
}
});
});
</script>
{% endblock content %}

我也用不同的视图尝试过这个

def like_post(request, pk):
post = Post.objects.get(id=pk)
liked = False
if request.method == 'POST':
if post.likes.filter(id=request.user.id).exists():
post.likes.remove(request.user)
liked = False
else:
post.likes.add(request.user)
post.dislikes.remove(request.user)
liked = True
return render(request, 'new.html')

型号.py:class Post(models.Model(:喜欢=模型。ManyToManyField(User,related_name='liked_posts',null=True,blank=True(

在生成JavaScript代码时,item未定义,因此出现错误。最好在按钮中对URL进行编码,然后对该URL进行AJAX调用:

<script>
function getCookie(name) {
let cookieValue = null;
if (document.cookie && document.cookie !== '') {
const cookies = document.cookie.split(';');
for (let i = 0; i < cookies.length; i++) {
const cookie = cookies[i].trim();
// Does this cookie string begin with the name we want?
if (cookie.substring(0, name.length + 1) === (name + '=')) {
cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
break;
}
}
}
return cookieValue;
}
constcsrftoken= getCookie('csrftoken');
$(document).on('submit','#like_form',function(e){
e.preventDefault();
$.ajax({
type:'POST',
url:$(this).attr("url"),
data : {csrfmiddlewaretoken: csrftoken},
success:function(){
}
});
});
</script>
{% block content %}
{% for item in products %}
<div class="item_btns_container">
<div class="like_btn_form_container">
<form id="like_form">
{% csrf_token %}
{% if user in item.likes.all %}
<button type="submit" class="liked_post"url="{% url 'like_post' item.id %}"name="post_id" value="{{ item.id }}"><div class="liked_btn" >Like</div></button>
{% else %}
<button type="submit" class="like_btn"url="{% url 'like_post' item.id %}"name="post_id" value="{{ item.id }}"><div class="liked_btn">Like</div></button>
{% endif %}
</form>
</div>
{% endfor %}
{% endblock content %}

相关内容

最新更新