Django AJAX URL вызова не найден - PullRequest
0 голосов
/ 10 июля 2020

Я хочу передать данные из вызова AJAX в мое django представление.

My html:

<a href="javascript:" class="word_known btn btn-warning btn-sm" data-songpk="{{song_pk}}" data-userpk="{{user_pk}}">Yes</a>

Мой jquery:

$(document).ready(function() {
  var known_words = 0;
  $(".word_known").click(function() {
    known_words++;
    var reference = this;
    var songpk = $(this).data('songpk');
    var userpk = $(this).data('userpk');
    $.ajax({
      url: "/videos/songs/vocab/"+songpk+"/"+userpk+"/",
      data: {known_words: known_words},
      success: function(result) {
    $(reference).removeClass("btn-warning");
    $(reference).addClass("btn-success");
    $(reference).text("Known");
  },
      failure: function(data) {
        alert("There is an error!")
      }
      })

});
})

Мой вид:

def word_known(request):
    if request.method =='POST':
        pass
    elif request.method == 'GET':
        request.GET.get('known_words')
        known_words = request.session.get('known_words')
    return known_words

Мой URL для моего videos приложения:

   path('songs/vocab/<int:pk_song>/<int:pk_user>/known_words=<int:count>', views.word_known, name='song-known'),

Кажется, что переменная known_words работает (когда я нажимаю, счетчик увеличивается), но я получаю ошибку 404. Отображается следующий URL: GET http://dev-lr:8000/videos/songs/vocab/1/3/?known_words=1 404 (Not Found).

Кто-нибудь, пожалуйста, скажите мне, что я делаю неправильно?

Ответы [ 2 ]

0 голосов
/ 11 июля 2020

Оказывается, моя проблема заключалась в том, что я пропустил прямой sla sh в моем пути URL, и я также не включил все необходимые аргументы.

Итак, я изменил свое мнение следующим образом:

def word_known(request, pk_song, pk_user):
    if request.method =='POST':
        pass
    elif request.method == 'GET':
        known_words = request.GET.get('known_words', '')
        # known_words = request.session.get('known_words')
        print('The number of known words is {}'.format(known_words))

    return HttpResponse(json.dumps(known_words))

А мой URL такой:

path('songs/vocab/known/<int:pk_song>/<int:pk_user>/', views.word_known, name='song-known'),

И теперь он работает.

0 голосов
/ 10 июля 2020

Из вашего кода кажется, что путь вашего представления настроен иначе, чем тот, который вы вызываете во внешнем интерфейсе. Обратите внимание, что вам не хватает начального ? для строки запроса в пути и, следовательно, 404. Я бы посоветовал вместо жесткого кодирования URL-адреса кодом использовать тег шаблона {% url %}, например

url: "{% url 'song-known' songpk userpk known_words %}"

Вы можете сделать то же самое в остальной части вашего Javascript кода, подумайте, что шаблон Django выполняется до обслуживания страницы, поэтому вы можете без проблем использовать свои переменные шаблона в этой части, например:

var songpk = '{{songpk}}';

, а затем вы избегаете необходимости извлекать значение из элемента HTML.

Еще одна вещь, которая кажется мне странной в коде, - это то, как вы обрабатываете вещи (используя запрос GET для отправки каких-то данных), но это уже другая история для другого вопроса :)

...