Как отправить простые данные с помощью Ajax jQuery в views.py в Django?

Я хочу отправить простые данные (число) из home.html в функцию в views.py, используя Ajax jQuery. Но кажется, что функция не вызывается.

home.html: Я правильно получаю ответ об успехе. Я вижу tagID в уведомлении об успехе. Я хочу видеть это в моем views.py

...
function GetInfo(e){
                document.getElementById("test3").innerHTML = e.target.myCustomID;
                var tagID = e.target.myCustomID;

        $.ajax({
            url: 'Ajax1',
            type: "POST",
            data: {
                'tagID': tagID,
                'csrfmiddlewaretoken': '{{ csrf_token }}',
            },
            success: function (data) {
                alert ("Congrats! You sent some data: " + tagID);}
            ,
            error: function() {
                 alert ("Something went wrong");
             }
                })};

views.py:. Я хочу увидеть, что эта функция вызывается аяксом. Так что если команда print ("AAAAAAAAAAAAAAA") работает, я счастлив!

...
@csrf_exempt
def Ajax1(request):
    print ("AAAAAAAAAAAAA")
    if request.is_ajax() and request.POST():
        print("BBBBBBBBBBBBB")
        TagID = request.POST.get('tagID', None)
    else:
        raise Http404

my_app/urls.py

urlpatterns = [
    url(r'', views.home_map, name="home"),
    url(r'^ajax/$', views.Ajax1, name="Ajax")
]

urls.py

urlpatterns = [
    path(r'', include('my_app.urls')),
    path('admin/', admin.site.urls),
    path(r'^ajax/$', Ajax1, name='Ajax')
]

не могли бы вы сообщить мне, чего мне не хватает? Спасибо

Вы неправильно выполняете вызов ajax. Вы должны передать EXACT URL вашей конечной точки внутри url:''

Вы передали строку 'Ajax1', которая в вашем urls.py нигде не найдена. В urls.py у вас есть 'ajax' в качестве шаблона url, а Ajax1 - это имя вашей функции представления.

Также я заметил, что в вашем urls.py у вас есть одинаковые шаблоны для двух разных методов представления (это плохая практика).

Пока что сделайте это внутри вашего ajax

$.ajax({
            url: "{%url 'Ajax'%}",  //This is the jinja template tag that will automatically fill in the url pattern from your urls.py corresponding to the name of that url pattern
            type: "POST",
            data: {
                'tagID': tagID,
                'csrfmiddlewaretoken': '{{ csrf_token }}',
            },
            success: function (data) {
                alert ("Congrats! You sent some data: " + tagID);}
            ,
            error: function() {
                 alert ("Something went wrong");
             }
  })

Похоже, что у меня была ошибка в urls.py

urls.py:

urlpatterns = [
    path('', views.home_map, name='home.html'),
    path('admin/', admin.site.urls),
    path('ajax-view/', views.ajax1)
    # path('ajax/', ajax1, name='ajax1')
]

home.html:

                    $.ajax({
                        type: "POST",
                        url: '{{ "ajax-view/" }}',

                        data: {
                        'csrfmiddlewaretoken': '{{ csrf_token }}',
                        'tagID': tagID
                         },
                     success: function (data) {
                             alert ("Congrats! You sent some data: " 
                                    +tagID)
                    ,
                        error: function() {
                              alert ("Something went wrong");}
                        })
                };
Вернуться на верх