【发布时间】:2021-04-13 17:54:00
【问题描述】:
完全错误:未找到带有参数“(”,)”的“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: 类帖子(模型。模型): likes = models.ManyToManyField(User, related_name='liked_posts', null=True, blank=True)
【问题讨论】:
-
在模板(JavaScript)中,
item未定义。 -
我已编辑将脚本放在下面
-
但这不很重要。
{% url ... %}模板标签使用item.id,但是当时有没有item.id。
标签: django django-views django-templates