Удалите сообщение Specifi c из внешнего интерфейса, используя ajax в Django (представление на основе классов) - PullRequest
1 голос
/ 29 января 2020

У меня есть много постов, созданных с использованием l oop в django, и я хочу удалить заданную c запись (например, удаление из Facebook работает). Я могу получить id сообщения, используя jquery, но я не уверен, что делаю неправильно, чтобы удалить сообщение. Я также реализовал функцию удаления в class based view.

Кнопка удаления сообщения

существующая панель инструментов. html

{% for i in all_posts %}
... ///rest of the code
<span class="username"><a href="#">{{ i.first_name }} {{i.surname}}</a>
      <span class="more" id="more-icon">{{i.post_id}}
          <div class="more-menu" style="margin-top: 30px;">
            <span class="delete" id="{{i.post_id}}">delete</span>
          </div>
      </span>
... /// rest of the code 
</span>
{% endfor%}

Ajax

$('.delete').on('click', function(){
 var post_id = $(this).attr('id');
 alert(post_id)
 $.ajax({
   url: 'http://127.0.0.1:8000/existing-delete/' + post_id +'/',
   type: 'DELETE', 
   data: {},
   contentType: 'application/json',
   dataType: 'text',
   error:
   function(result){
     alert(result)
   },
   success:
   function(result){
     alert(result)
   }
 })
})

views.py

class ExistingStudentDashboard(TemplateView):
.../// rest of the code
    def delete(self, request, pk, format=None):
        post1 = Existing_student_posts.objects.filter(id = pk).first()
        post2 = Future_student_posts.objects.filter(id = pk).first()
        post3 = Teacher_posts.objects.filter(id = pk).first()
        post4 = Employee_posts.objects.filter(id = pk).first()

        if post1:
            post1.delete()
        elif post2:
            post2.delete()
        elif post3:
            post3.delete()
        else:
            post4.delete()
        get_context_data()

urls.py

path('existing-delete/,<int:pk>', views.ExistingStudentDashboard.as_view(), name = 'existing-delete'),

Ошибка получения в консоли, как показано ниже

Не найдено: / существующие-delete / 61 /

Ошибка консоли браузера

Ошибка консоли браузера

Что я делаю не так, чтобы удалить пост. Не стесняйтесь спрашивать о дополнительных разъяснениях. Любая помощь будет оценена :)

1 Ответ

0 голосов
/ 29 января 2020

У вас есть опечатка на вашем пути, замените ее на

path('existing-delete/<int:pk>', views.ExistingStudentDashboard.as_view(), name = 'existing-delete'),

Редактировать:

Используйте это, чтобы получить токен csrf в javascript

function getCookie(name) {
  var cookieValue = null;
  if (document.cookie && document.cookie !== '') {
    var cookies = document.cookie.split(';');
       for (var i = 0; i < cookies.length; i++) {
         var cookie = jQuery.trim(cookies[i]);
         if (cookie.substring(0, name.length + 1) === (name + '=')) {
           cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
                            break;
      }
    }
  }
  return cookieValue;
}
var csrftoken = getCookie('csrftoken');

Затем, делая запрос ajax, передайте его заголовкам.

headers: {"X-CSRFToken":csrftoken }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...