Django for 循环在按下按钮时多次激活视图
Django for-loop activates view multiple times when a button is pressed
我一直在做一个博客网站,当然你会在上面发布东西。我有一个索引.html其中有这个:
{% for post in posts %} {% include "blog/featuredpost.html" %} {% endfor %}
我也用过Django分页。现在,我想做的是一个可重复使用的喜欢和不喜欢按钮,这意味着我可能希望在"blog/featuredpost.html"中使用它。所以,这就是我所做的。
<div class="row">
<div class="col-sm-5">
<div id="divLikes" class="col-sm-6 bg-success text-center">
Likes: {{ post.likes }}
</div>
<div id="divDislikes" class="col-sm-6 bg-danger text-center text-block">
Dislikes: {{ post.dislikes }}
</div>
</div>
{% if user.is_authenticated %}
<div>
<div class="col-sm-2">
<form id="like_form" action="" method="POST">
{% csrf_token %}
<button id="like_button" type="submit" value="vote" class="btn btn-success btn-sm btn-block">
<span class="glyphicon glyphicon-thumbs-up" aria-hidden="true"></span> Like
</button>
</form>
</div>
<div class="col-sm-2">
<button type="button" class="btn btn-danger btn-sm btn-block">
<span class="glyphicon glyphicon-thumbs-down" aria-hidden="true"></span> Dislike
</button>
</div>
<div class="col-sm-3">
<button type="button" class="btn btn-warning btn-sm btn-block">
<span class="glyphicon glyphicon-comment" aria-hidden="true"></span> Comment
</button>
</div>
</div>
{% endif %}
<script type="text/javascript">
//$('#like_button').click(function(){ });
/* The for cycle sends all the posts id that should appear on the page.
It should send just the one on which the like button is clicked. */
$(document).on('submit', '#like_form', function(event) {
event.preventDefault();
$.ajaxSettings.traditional = true;
$.ajax({
type: 'POST',
url: '{% url "like" %}',
dataType: 'json',
data: {
csrfmiddlewaretoken: '{{ csrf_token }}',
LikeId: {{ post.id }},
},
success: function(response) {
$('#divLikes').load(' #divLikes', function() {
/* It's important to add the space before #divLikes, I don't know why */
$(this).children().unwrap()
})
}
});
})
views.py
def view_like(request):
# AJAX Like Button
if request.user.is_authenticated:
if request.method == 'POST':
likepostId = request.POST.get('LikeId', '')
print(likepostId)
likepost = get_object_or_404(Post, id=likepostId)
print(likepost.title + " has " + str(likepost.likes))
response_data = {}
return JsonResponse(response_data)
else:
raise Http404
return 200
我目前有它,所以它只会打印出某些东西。在首页上,由于AJAX成功函数,它实际上只是复制了html/css部分。如何让"赞"按钮明确知道我想在我点击的某个帖子上点赞?因为,就像现在一样,它只是向页面上所有其他帖子的所有 id 发送垃圾邮件,没有特定的顺序。
问题是你有一堆具有相同 id 的节点(#like_form
和 #like_button
),并且你向所有这些节点添加事件。不允许有多个具有相同值的元素 id
。从form
中删除属性id
,将button
的id
更改为class
,并将其值设置为帖子的id,即:
<button type="submit" value="{{ post.id }}" class="vote_button btn btn-success btn-sm btn-block">
然后将事件挂.vote_button
类,并提交其值(因此ajax
请求中的data.LikeId
将类似于 $(event.target).val()
)到 Idenfity 您投票的帖子
编辑:
JavaScript大致如下所示:
<script type="text/javascript">
$(".vote_button").click(function(event) {
event.preventDefault();
$.ajaxSettings.traditional = true;
$.ajax({
type: 'POST',
url: '{% url "like" %}',
dataType: 'json',
data: {
csrfmiddlewaretoken: '{{ csrf_token }}',
LikeId: $(event.target).val(),
},
success: function(response) {
/* I am not sure what is this supposed to do
load() expects url as the first parameter, not a node
*/
$('#divLikes').load('#divLikes', function() {
$(this).children().unwrap()
})
}
});
});
</script>
相关文章:
- 如何使用javascript从主svg对象动态创建svg视图框
- 正在使用$location.path(.)路由ng视图
- angular.js没有'无法在PhoneGap中处理视图标记
- 如何包含特定于每个视图angularjs的javascript文件
- 通过在Dojo mobile ViewController.openExternalView中动态更改打开同一外部视图的
- Kendo:我该如何在树视图中创建一个递归的hieiarchy
- Ajax Live搜索发布到Laravel视图
- backbone.js无法渲染视图
- 根据某些条件在视图之间切换
- 激活chrome上的chrome.notifications对象
- 提示使用服务器端事件处理程序激活JavaScript
- ng视图外的链接重定向到ng视图内的页面
- 如何在Jquery中发布后将值从视图返回到控制器
- 如何从外部页面激活非默认引导选项卡
- Django for 循环在按下按钮时多次激活视图
- Durandal:Widget的激活回调的行为不像常规视图模型的回调
- 避免在重新激活视图时从头开始重新渲染闪光对象
- 在视图中激活javascript动画
- 只有在DurandalJS中激活了所有组合模块后,才能附加视图
- Angular的新路由器可以全局激活多个视图