Получение ошибки not found url при выполнении post-запроса к определенному url с помощью htmx в Django

Я делаю подобную функцию в своем блоге без обновления страницы. Но получаю ошибку [06/Apr/2022 20:48:26] "POST /like/post/4/ HTTP/1.1" 404 3945. Вот что я делаю


base.html с настройками htmx

<!-- Load from unpkg -->
<script src="https://unpkg.com/htmx.org@1.7.0"></script>
<script>
    document.body.addEventListener('htmx:configRequest', (e) => {
        e.detail.headers['X-CSRFToken'] = '{{ csrf_token }}';
    })
</script>

views.py

def add_like_post(request, pk):
    post = get_object_or_404(Post, id=request.POST.get('post_id'))
    post.likes.add(request.user)
    return HttpResponseRedirect(post.get_absolute_url())

urls.py

urlpatterns += [
    path('like/post/<int:pk>/', add_like_post, name='like-post'),
]

post-detail.html

{#<form method="post" action="{% url 'like-post post.id %}">{% csrf_token %}#}
     <button hx-post="{% url 'like-post' post.id %}" hx-target="#likes" id="likes"  hx-swap="outerHTML" class="btn btn-block btn-outline-secondary btn-lg mb-2 mx-auto" name="post_id" value="{{ post.id }}"><i class="fa fa-thumbs-up"> L i k e - {{ post.number_of_likes }}</i></button>
{# </form>#}

Когда я удаляю настройки htmx из кнопки и добавляю type='submit', а также некомментирую форму, все работает нормально. Есть ли что-то, что я сделал неправильно

Элемент кнопки не является элементом формы, поэтому HTMX не будет включать его в запрос сообщения. Однако у вас уже есть данные post_id в целевом URL, поэтому вы можете просто использовать их в функции просмотра:

post = get_object_or_404(Post, id=pk)

Ор, вы можете поместить скрытый элемент с post_id и включить его в запрос через hx-include атрибут .

<input type="hidden" name="post_id" value="{{ post.id }}" />
<button hx-post="{% url 'like-post' post.id %}" 
        hx-target="#likes" 
        id="likes"  
        hx-swap="outerHTML"
        hx-include="[name='post_id']"
        class="btn btn-block btn-outline-secondary btn-lg mb-2 mx-auto">
    <i class="fa fa-thumbs-up"> L i k e - {{ post.number_of_likes }}</i>
</button>
Вернуться на верх