Маршрут Django не может быть доступен в методе fetch POST, но может быть доступен в методе manual GET

Когда я пытаюсь удалить фракцию из своего приложения с помощью маршрута saga/delete/2 после нажатия кнопки deleteSubmit, программа возвращает следующую ошибку: "POST /saga/delete/2/ HTTP/1.1" 404 3048 Не найдено: /saga/delete/2/

Мое приложение использует следующие соответствующие шаблоны url

saga/ edit/<int:factionId> [name='edit']
saga/ delete/<int:factionId> [name='delete']

Этот JavaScript обрабатывает отправку формы

factionForm.addEventListener('submit', function(event) {
        //prevent the default form submission
        event.preventDefault(); 
        //If the Save Changes button is clicked
        if (event.submitter === saveSubmit){
            console.log("Save Changes Pressed");
            // Code to handle form submission and save changes to the database
        }

        //Otherwise if the Delete changes button is clicked
        else if(event.submitter === deleteSubmit){
            console.log("Delete Faction Pressed");
            //Attempt to send data to server
            fetch(`/saga/delete/${factionId.value}/`, {
                method: 'POST',
                headers: {
                    'X-CSRFToken': getCSRF(),
                },
            })
            //Get response from server
            .then(response => {
                if (response.ok) {
                    console.log('Faction deleted successfully');
                } else {
                    //If a problem occurred display the response
                    console.error('Error deleting faction',response);
                }
            })
            //If There is an error output it
            .catch(error => {
                console.error('Error:', error);
            });
        }

        //Otherwise if neither approved button submitted the form something went wrong
        else {
            console.log(event.submitter, "somehow submitted the form, check and correct the code near that element");
        }
    })

Код, который я использую для функции getCSRF(), находится здесь:

function getCSRF() {
    const cookies = document.cookie.split('; ');
    for (let i = 0; i < cookies.length; i++) {
        const [name, value] = cookies[i].split('=');
        if (name === "csrfToken") {
            return decodeURIComponent(value);
        }
    }
  return null;
}

Здесь также находится соответствующая функция просмотра

def delete(request,factionId):
    #Get Faction To Delete
    faction = Faction.objects.filter(id = factionId)
    #If Faction Exists and Data has been posted from a form
    if faction.count() > 0 and request.method == 'POST':
        #Delete the faction
        faction.delete()
        #Return to create page on success (Will change to success message later)
        return redirect(reverse("saga:create"))
    
    #Return to home page on failure (happens currently during a Get request
    return redirect(reverse("saga:index"))    

Моя форма была определена следующим образом:

<form id = "factionForm" method = "post">
        {% csrf_token %}
<!-- Lots of Code -->
</form>

Что я упустил и как мне изменить код, чтобы мой POST был принят?

Я пытался удалить csrf_token и использовать декоратор @csrf_exempt безрезультатно.

Я пытался использовать различные функции для получения csrf_token, но, насколько я могу судить, моя текущая функция получает токен.

Я проверил файл settings.py, чтобы убедиться, что 'django.middleware.csrf.CsrfViewMiddleware' присутствует, и он присутствует.

Я пытался изменить шаблоны url, но безуспешно.

Возможно, проблема заключается в этом:

fetch(`/saga/delete/${factionId.value}/.....

обратите внимание на косую черту в конце. Но в вашем urls.py:

path("delete/<int:factionId>", views.delete, name = 'delete')

у вас нет слэша в конце строки. Я думаю, что проблема может заключаться в том, что у вас должен быть слэш в конце строки. Попробуйте убрать или добавить косую черту в обе вышеприведенные строки кода и посмотрите, работает ли это.

Вернуться на верх