Как отправить django url с параметрами в ajax запрос?

В настоящее время я отправляю url в ajax как :

    $('.togglebtn').on("click",function(){
         console.log("Hello")
         $.ajax({
            type: 'GET',
            url: "http://localhost:8000/toggle/2945016571198",
            contentType: 'application/json',
            success: function (data) {
                  appendData(data);
                   function appendData(data) {
            var mainContainer = document.getElementById("switch_{{forloop.counter}}");
            for (var i = 0; i < data.length; i++) {
                var div = document.createElement("div");
                div.innerHTML = '<tr>' + data[i].line_items + ' ' + data[i].nomenclature+'</tr>' ;
                mainContainer.appendChild(div);
            }
        }
            }
  });

В настоящее время я посылаю запрос в статический url. Можно ли использовать {% url toggle i.id %} для динамической установки url в ajax-запросе? Повторяется ли эта ajax-функция вообще или нет?

Не таким образом или способом, {% url toggle i.id %} предназначен для шаблона Django, поэтому он выполняется при рендеринге страницы на стороне сервера. То, что вы хотите сделать, выполняется на стороне клиента.

Вы также пытаетесь использовать "switch_{{forloop.counter}}", что не сработает, если у вас нет нескольких фрагментов функции 'click'. Что я бы не советовал делать, поскольку это просто не имеет смысла. Вы определяете функцию один раз, а затем используете ее. Смотрите первый пример

Лучшее, что я могу придумать, это раскрытие 'базового url' в вашем шаблоне и использование его в javascript. Например, в вашем шаблоне Django:

<script>
// Put the Django variable into javascript context.
toggle_base_url = {{ toggle_base_url_from_django_view_context }};
// Use it in your ajax url by combining strings.
 $('.togglebtn').on("click",function(){
         console.log("Hello")
         var obj = $(this); // Save the clicked button for reference.
         var objectId = obj.attr('id');
         var buttonId = obj.attr('data-button-id');
         $.ajax({
            type: 'GET',
            url: toggle_base_url + "/" + buttonId
            contentType: 'application/json',
            success: function (data) {
                // Cannot use 'this' in this context (IIRC), use the obj var we assigned.
                // Replace with something to find your parent container
                // Could use have a attribute on your button that points to the container.
                // Probably the number you use in the url?
                var mainContainer = obj.parent('containerclass');
                for (var i = 0; i < data.length; i++) {
                    var div = document.createElement("div");
                    div.innerHTML = '<tr>' + data[i].line_items + ' ' + data[i].nomenclature+'</tr>' ;
                    mainContainer.appendChild(div);
                }
            }
        }
  });

</script>

В вашем представлении Django вы делаете что-то вроде этого:


# Make a base url to reuse, remove the last part.
# So turn `/toggle/1` into `/toggle`
base_url = reverse('toggle', args=[1]).rsplit('/', 1)
context = {
    'toggle_base_url_from_django_view_context': base_url,
}
return render(request, 'yourtemplate.html', context=context)
Вернуться на верх