Как изменить значение переменной шаблона django в коде JavaScript? - PullRequest
0 голосов
/ 29 сентября 2018

У меня есть видео на моей html-странице.Когда пользователь нажимает кнопку, начинается видео.Когда видео заканчивается, мне нужно изменить параметр users 'views_num'.Вот мой код Javascript:

document.getElementById('get-views').onclick = function() {
  var videoE1 = document.getElementsByTagName('video')[0];
  videoE1.play();
  videoE1.addEventListener('ended', function () {
    {{ user.views_num| add:5}}
  }, false);
};

Поэтому, когда я захожу на HTML-страницу и нажимаю кнопку, видео не воспроизводится автоматически, и мне нужно запустить его с помощью кнопки управления.Кроме того, после окончания видео «views_num» не меняется.Как я могу изменить значение переменной?PS views_num - это IntegerField.

1 Ответ

0 голосов
/ 29 сентября 2018

Вы не можете изменять переменные Python / Django в JavaScript.Вы должны создать отдельный URL-адрес и представление в Django и вызывать это представление асинхронно с ajax после завершения видео.Вы должны передать идентификатор пользователя в представлении, а затем поднять его views_num и вернуть, например, JsonResponse.Смотрите код ниже.Конечно, вы должны передать пользователя в контекст шаблона, чтобы использовать {{ user.id }} в $.get.

urls.py
path('user/count-views/<int:user_id>', views.count_views, name='count_views')

views.py
def count_views(request, user_id=None):
    user = get_object_or_404(User, id=user_id)
    user.views_num += 5
    user.save()
    return JsonResponse(data=user.views_num, safe=False)


# Call count_view via constructed url after video has ended
videoE1.addEventListener('ended', function () {
    $.get("user/count-views/" + {{ user.id }});
  }, false);
...