【问题标题】:Django : Why POST urls are not working in Django AJAX?Django:为什么 POST url 在 Django AJAX 中不起作用?
【发布时间】: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 非常感谢。我在发布问题后几分钟就想通了。

标签: jquery ajax django url


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2021-01-18
    • 2019-01-26
    • 2017-01-13
    • 2020-06-06
    • 2023-03-20
    • 1970-01-01
    • 2016-04-17
    • 1970-01-01
    • 2018-01-30
    相关资源
    最近更新 更多