Django: почему в Django AJAX не работают URL-адреса POST? - PullRequest
0 голосов
/ 27 декабря 2018

Я создаю кнопку «Мне нравится» в Django, используя вызовы AJAX для моей домашней страницы (где у меня есть список сообщений, которые пользователь может «Нравится»), Для тестирования логики кнопки «Мне нравится» я использовал обычный (с обновлением страницы) способ отправкиформа, и она работает правильно, где я даю URL-адрес как action='{% url "like_post" %}'.Но когда я отправил заявку на основе AJAX, я получаю сообщение об ошибке: POST http://127.0.0.1:8000/like/ 404 (Not Found).

template.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

1 Ответ

0 голосов
/ 27 декабря 2018

Я разобрался с решением через некоторое время.А также благодаря @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 }}'
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...