Метод не допускается POST 405 - PullRequest
0 голосов
/ 23 марта 2020

Я пытаюсь добавить сообщение на свой сайт в Django, используя Ajax. Тем не менее, всякий раз, когда я нажимаю на кнопку записи, я получаю сообщение об ошибке:

'Method Not Allowed: /home/ 
"POST /home/ HTTP/1.1" 405 0

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

Это мои взгляды для создания поста и его просмотра.

@login_required
def home(request):
    posts = Post.objects.all()
    context = {'posts':posts}
    return render(request, 'home/home.html', context)

class PostListView(LoginRequiredMixin,ListView):
    model = Post
    #redirect_field_name = 
    template_name = 'home/home.html'  # <app>/<model>_<viewtype>.html
    context_object_name = 'posts'
    ordering = ['-date_posted'] 

@login_required
def post_create(request):
    data = dict()
    if request.method == 'POST':
        form = PostForm(request.POST)
        if form.is_valid():      
            form.save()
            data['form_is_valid'] = True
            posts = Post.objects.all()
            data['posts'] = render_to_string('home/home_post.html',{'posts':posts})
        else:
            data['form_is_valid'] = False
    else:
        form = PostForm       
    context = {
    'form':form
    }
    data['html_form'] = render_to_string('home/post_create.html',context,request=request)
    return JsonResponse(data) 

Это мои URL дома / urls.py:

urlpatterns = [
    path('',views.PostListView.as_view(), name='home'),
    path('post/<int:pk>/', views.post_detail, name='post-detail'),
    path('<int:pk>/like/', views.PostLikeToggle.as_view(), name='like-toggle'),
    path('api/<int:pk>/like/', views.PostLikeAPIToggle.as_view(), name='like-api-toggle'),
    path('post/<int:id>/update/', views.post_update, name='post-update'),
    path('post/<int:id>/delete/', views.post_delete, name='post-delete'),
    path('post/create/', views.post_create, name='post-create'),
  ]

это мой post_create. html:

{% load crispy_forms_tags %}
    <form method="POST" data-url="{% url 'home:post-create' %}" class="post-create-form">
        {% csrf_token %}
            <div class="modal-header">
                <h5 class="modal-title" >Create a Post</h5>
                <button type="button" class="close" data-dismiss="modal" aria-label="Close">
                    <span aria-hidden="true">&times;</span>
                </button>
            </div>
            <div class="modal-body">
                {{ form|crispy }}
            </div>
            <div class="modal-footer">
                <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
                <button type="submit" class="btn btn-primary">Post</button>
            </div>
    </form>

А это мой Javascript код:

$(document).ready(function(){
    $(function () {
        $(".create-post-btn").click(function () {
          $.ajax({
            url: '/home/post/create',
            type: 'get',
            dataType: 'json',
            beforeSend: function () {
              $("#modal-post").modal("show");
            },
            success: function (data) {
              $("#modal-post .modal-content").html(data.html_form);
            }
          });
        }); 
    });

    $("#modal-post").on("submit", ". post-create-form", function () {
        var form = $(this);
        $.ajax({
          url: form.attr("action"),
          data: form.serialize(),
          type: form.attr("method"),
          dataType: 'json',
          success: function (data) {
            if (data.form_is_valid) {
                $('#post-list div').html(data.posts);
                $('#modal-post').modal('hide');
            }
            else {
              $("#modal-post .modal-content").html(data.html_form);
            }
          }
        });
        return false;
      });
});

Заранее спасибо за помощь!

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