首页 > 解决方案 > 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 调用

标签: jqueryajaxdjangourl

解决方案


一段时间后我想出了解决方案。还要感谢@Chiefir,在views.py中我一直在寻找likepost = get_object_or_404(Posts, id=request.POST.get('like')) 而ajax调用不会发布任何数据JSON键like......所以在datatemplate.py的变量中,我们只需进行以下更改......

data = {
    'like' : '{{ post.id }}'
    csrfmiddlewaretoken: '{{ csrf_token }}'
}

推荐阅读