Django-Ajax дает ошибку «Метод не разрешен (POST): / post / like /» - PullRequest
0 голосов
/ 07 июня 2019

Я новичок в django. Я впервые использую ajax и django.Я старался изо всех сил искать здесь и там, но я не мог найти решение

этот ответ также не помог

Django и ajax запрос Метод не разрешен (POST)

ошибка, которую я получаю:

Method Not Allowed (POST): /post/like/
[07/Jun/2019 16:06:16] "POST /post/like/ HTTP/1.1" 405 0

ниже приведены коды

likes_section.html

{% if request.user.is_authenticated %}
<form  action="{% url 'like_post' %}" method="post">
  {% csrf_token %}

  {% if is_liked %}
  <span class="mr-2" style="color:black;">{{ post.total_likes }} Like{{ post.total_likes|pluralize }}<button type="submit" id="like_the_post_by_user" class="btn btn-primary ml-2" name="post_id" value="{{ post.id }}">DisLike</button></span>
  {% else %}
  <span class="mr-2" style="color:black;">{{ post.total_likes }} Like{{ post.total_likes|pluralize }}<button type="submit" id="like_the_post_by_user" class="btn btn-primary ml-2" name="post_id" value="{{ post.id }}">Like</button></span>
  {% endif %}
</form>
{% else %}
  <span class="mr-2">{{ post.total_likes }} Like{{ post.total_likes|pluralize }}<button type="submit" id="like_the_post_by_user" class="btn btn-primary ml-2" name="post_id" value="{{ post.id }}" disabled>Like</button>Please Login to enable Like button</span>
{% endif %}

Ajax

$(document).ready(function(event){
    $(document).on('click',"#like_the_post_by_user", function(event){
      event.preventDefault();
      console.log($("#like_the_post_by_user").val())
      console.log("from jquery section")
      var pk = $(this).attr('value');
      $.ajax({
        type : "POST",
        url : "{% url 'like_post' %}",
        data : {'id': pk , "csrfmiddlewaretoken": '{{ csrf_token }}' },
        dataType : 'json',
        success : function(response){
          $('#like-section_user').html(response['form'])
          console.log($('#like-section_user').html(response['form']));
        },
        error : function(rs, e){
          console.log(rs.responseText);
        }

      });

    });

  });

urls.py

urlpatterns = [
    path('', PostListView.as_view(),name="blog-home"),
    path('post/<int:pk>/', PostDetailView.as_view(),name="post-detail"),
    path('post/new/', PostCreateView.as_view(),name="post-create"),
    path('post/<int:pk>/update/', PostUpdateView.as_view(),name="post-update"),
    path('post/<int:pk>/delete/', PostDeleteView.as_view(),name="post-delete"),
    path('user/<str:username>/', UserPostListView.as_view(),name="user-posts"),
    path('post/<str:category>/', CategoryListView.as_view(),name="category-posts"),
    path('about/', AboutListView.as_view(),name="about"),
    #path('users/myposts/', ActiveUserPostDetailView.as_view(),name="my-blogs"),
    path('feedback-email/', views.feedback_email,name="feedback-email"),
    path('post/like/', views.like_post,name="like_post"),
]

views.py

def like_post(request):
    #post = get_object_or_404(Post,id=request.POST.get("post_id"))
    if request.method == 'POST':
        print('method is {}'(request.method))
    print("\ninside like view\n")
    print("\n in {} \n".format(request.POST.get('id')))
    post = get_object_or_404(Post,id=request.POST.get("id"))

    is_liked = False
    if post.likes.filter(id=request.user.id).exists():
        print("\ninside like\n")
        post.likes.remove(request.user)
        is_liked = False
    else:
        print("\ninside dislike\n")
        post.likes.add(request.user)
        is_liked = True
    comments = Comment.objects.filter(post=post,reply=None).order_by("-id")
    context = {
    "post":post,
    "is_liked":is_liked,
    "comment": comments
    }
    #return redirect("post-detail",pk=request.POST.get("post_id"))
    print("\ngetting in ajax\n")
    if request.is_ajax():
        print("\ninside ajax\n")
        html = render_to_string('blog/likes_section.html', context, request=request)
        return JsonResponse({"form":html})

любая помощь будет принята с благодарностью!

Заранее спасибо

1 Ответ

1 голос
/ 07 июня 2019

Ваш "/ post / like" URL соответствует шаблону URL для CategoryListView, так как это "post" плюс строка.

Как и в случае с подробным представлением публикации, добавьте шаблон для аналогичного представления ранее в список URL-адресов, чтобы он сначала совпадал.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...