jquery - Django:为什么 POST url 在 Django AJAX 中不起作用?
问题描述
我在 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 %}
网址.py:
urlpatterns = [
path('like/', views.like_post, name="like_post")
.
.
.
]
视图.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 调用
解决方案
一段时间后我想出了解决方案。还要感谢@Chiefir,在views.py中我一直在寻找like
,post = get_object_or_404(Posts, id=request.POST.get('like'))
而ajax调用不会发布任何数据JSON键like
......所以在data
template.py的变量中,我们只需进行以下更改......
data = {
'like' : '{{ post.id }}'
csrfmiddlewaretoken: '{{ csrf_token }}'
}
推荐阅读
- php - PHP Snippet - Edge/Firefox 上的 WordPress 问题
- python - 带列表的字母计数器
- mysql - 将 SQL 查询转换为 mysql 查询时出错
- git - 为什么git在远程解析增量之前将对象写入远程
- android - android.arch.lifecycle:extensions:1.1.1 目录
- android - 我有一个错误,这是我的错误:确保首先调用 FirebaseApp.initializeApp(Context)
- docker - 所有依赖项都应该安装到 docker 映像吗?或者让它取决于主机
- powershell - PowerShell 在输出 CSV 中包含输入变量
- google-chrome - 无法从“https 服务器”上运行的 chrome pdf 查看器下载文件 PDF
- node.js - 在 Express js 中禁用所有控制台消息