JSON POST и GET 404 (Not Found)

Я пытаюсь создать API в Django, но получаю следующее сообщение об ошибке в консоли JavaScript.

GET http://127.0.0.1:8000/edit/undefined 404 (Not Found)
POST http://127.0.0.1:8000/edit/undefined 404 (Not Found)

Кто-нибудь знает, как решить эту проблему?

API url: path("edit/<int:post_id>", views.edit, name="edit")

views.py

def edit(request, post_id):
    try:
        post = Post.objects.get(user=request.user, pk=post_id)
    except Post.DoesNotExist:
        return JsonResponse({"error": "Post does not exist."}, status=404)

    if request.method == "GET":
        return JsonResponse(post.serialize())
    else:  
        return JsonResponse({"error": "Need a GET request."}, status=404)

JavaScript

document.addEventListener('DOMContentLoaded', function(){
    const editButtons = document.querySelectorAll('.edit_button');
    for (const button of editButtons) {
      button.addEventListener('click', () => edit_email());
    }
  });

function edit_email(id){
    console.log("edit button is clicked")
    document.querySelector('#post_itself').style.display = 'none';
    document.querySelector('#date_and_time').style.display = 'none';
    document.querySelector('#likes').style.display = 'none';

    const textarea = document.createElement('textarea');
    //get post
    fetch(`/edit/${id}`)
    .then(response => response.json())
    .then(post => {
        textarea.innerHTML =   `${post.post}`
        document.querySelector('#p_user').append(textarea);
    })

    //save the post
    fetch(`/edit/${id}`,{
        method: 'POST',
        post: JSON.stringify({
            post: textarea.value
        })
    })
}

HTML

{% for post in page_obj.object_list %}
            <div class = "individual_posts">
                <a href="{% url 'username' post.user %}"><h5 id="p_user" class = "post_user">{{ post.user }}</h5></a>
                <h6 id = "post_itself">{{ post.post }}</h6>
                <h6 id="date_and_time" class = "post_elements">{{ post.date_and_time }}</h6>
                <h6 id="likes" class = "post_elements">{{ post.likes }}&#x1F44D;</h6>
                {% if post.user == request.user %}
                    <button id="editButton" class="edit_button">Edit</button>
                {% endif %}
            </div>
        {% endfor %}

Я думаю, что что-то может быть неправильно в том, как я передаю id в API, но я не уверен. Может ли цикл for в HTML быть причиной проблемы?

вы вызываете edit_email без id здесь:

button.addEventListener('click', () => edit_email());

После вызова вы получаете /edit/undefined на этой строке:

fetch(`/edit/${id}`)

вы не посылаете ничего вроде id, я могу представить, что это должно быть что-то вроде этого:

button.addEventListener('click', (event) => edit_email(event.target.value));

Вам также нужно будет передать свойство value в кнопку как post.id, предполагая, что объект post будет иметь ключ id в вашем цикле for.

Если вы получаете ошибку ссылки, вам нужно проверить, есть ли в page_obj.object_list ключ id для всех постов.

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