【发布时间】:2018-12-27 09:06:29
【问题描述】:
我正在 Django 中使用 AJAX 调用为我的主页创建一个赞按钮(我有用户可以赞的帖子列表),为了测试赞按钮的逻辑,我使用了正常(页面刷新)方式提交表单,并且在我将 URL 指定为action='{% url "like_post" %}' 的情况下它可以正常工作。但是当我提交基于 AJAX 的表单时,我遇到了 POST http://127.0.0.1:8000/like/ 404 (Not Found) 错误。
模板.py:
{% for post in all_posts %}
<div class="posts" id="post-{{ post.id }}">
<h2 class="thought-title">{{ post.title }}</h2>
<p class="content" id="{{ post.id }}" onclick="showWholeContent({{ post.id }})">
{{ post.content }}
</p>
<div class="post-footer">
<form id="like-form{{ post.id }}">
{% csrf_token %}
<button type="submit" id="{{ post.id }}btn" name="like" value="{{ post.id }}" class="btn upvote">Like</button>
<script type="text/javascript">
{% for like in post.likes.all %}
{% if like != user %}
{% else %}
likingPost("{{ post.id }}btn");
{% endif %}
{% endfor %}
// Adding AJAX for Like button
$(document).ready(function(event){
$(document).on('click', '#{{ post.id }}btn', function(event){
event.preventDefault();
$.ajax({
type: 'POST',
url: '{% url "like_post" %}',
data: {
csrfmiddlewaretoken: '{{ csrf_token }}'
},
success:function(response){
}
});
});
});
</script>
</form>
</div>
</div>
{% endfor %}
urls.py:
urlpatterns = [
path('like/', views.like_post, name="like_post")
.
.
.
]
views.py:
def like_post(request):
print("Insisde Like Post")
post = get_object_or_404(Posts, id=request.POST.get('like'))
if post.likes.filter(id=request.user.id).exists():
post.likes.remove(request.user) # Liking The Post
print("DisLiking the post")
else:
post.likes.add(request.user)
print("Liking the post")
return HttpResponseRedirect('/')
注意:我是 AJAX 新手。这是我的第一个包含 AJAX 调用的项目
【问题讨论】:
-
我在这里看到一个问题 - 您正在尝试
id=request.POST.get('like'),但仅通过 AJAX 发布data: { csrfmiddlewaretoken: '{{ csrf_token }}' },。您还需要发布 like 键 -
当您提到
action='{% url "like_post" %}'时,您检查过action的值吗? -
@MohammadUmair 是的,我检查了我的
action,它工作正常。 -
@Chiefir 非常感谢。我在发布问题后几分钟就想通了。