Я пытаюсь добавить сообщение на свой сайт в 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">×</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;
});
});
Заранее спасибо за помощь!