Django с ajax Запрос - PullRequest
       15

Django с ajax Запрос

1 голос
/ 03 мая 2020

У меня есть код ниже

function OpenModal()
{
 var fname="Quartz";
 var mname="Rohit";
 var lname="Patel";

 var url="{% url 'display_modal' %}"+fname +"/"+mname+"/"+lname;
 alert(url);
    xmlhttp = new XMLHttpRequest();
    xmlhttp.onreadystatechange = function() {
        if (this.readyState == 4 && this.status == 200) {
            document.getElementById('divcontent').innerHTML=this.responseText;
        }
    };
    xmlhttp.open("GET",url,true);
    xmlhttp.send();
}

Как выполнить код выше по нажатию кнопки на django языке шаблонов. URL-адрес как

path('member/search/',
         views.displayModalView, name="display_modal"),

Ответы [ 3 ]

1 голос
/ 03 мая 2020

То, что ajax сделает, предотвратит перезагрузку страницы, это волхвы c из ajax. Так что, если вы предоставляете path, это можно использовать для перезагрузки страницы.

Html:

<script>
        function OpenModal(){
         var fname="Quartz";
         var mname="Rohit";
         var lname="Patel";
            $.ajax({
                type:'POST',
                url: "{% url 'display_modal' %}",
                data: { csrfmiddlewaretoken: '{{ csrf_token }}'},
                success: function(param123){
                    dict1 = JSON.parse(param123);
                    let data1 = dict1.test;
                    alert("Successful call do what ever you want");
                    alert(data1);
                },
                error: function(){
                    alert("sorry");
                }
            });
        }
</script>

urls.py: что url будет соответствовать регулярному выражению с вашим упомянутым URL. параметр name='display_modal' и url: "{% url 'display_modal' %}", которые вы упоминаете в вызове ajax, будут одинаковыми.

    from django.conf.urls import url
    urlpatterns = [
        url(r'^display_modal', views.displayModalView, name='display_modal')
    ]

views.py:

import json
from django.http import HttpResponse
def displayModalView(request):
    #do what ever you want but at the end return Httpresponse with dictionary if you want 
     to use dictionary in your ajax call.
   param123 = {'test': "Hello_world"}
   return HttpResponse(json.dumps(param123))
0 голосов
/ 03 мая 2020

Вы можете добавить кнопку onclick к вашей кнопке, значение которой должно соответствовать вашей функции следующим образом

<button onclick='show()' something else ... ></button>

------------------- ----------- javascript ------------------------------------ --------------

function show(){
        something else ...
}

Вы также можете просмотреть jquery документацию

0 голосов
/ 03 мая 2020

Я думаю, вы можете использовать запрос jQuery Ajax внутри обычного метода click (), как описано здесь: W3 C Документация

В этом случае, однако Я думаю, вы должны объявить URL-адрес как TemplateAsView , чтобы вы могли указать Django немедленно вернуть шаблон вместо выполнения представления Django, как описано в сделать c. В шаблоне вы можете выполнить функцию, как вы, например, sh, например, в шаблоне вы можете вставить вызов вашей функции в готовый документ и выполнить при загрузке DOM, как описано здесь .

Для этого вам нужно изменить URL, потому что view.someView предназначен для поиска внутри вашего view.py , someView объявление функции , но ваша функция - Javascript, поэтому, я полагаю, вы поместили ее в код шаблона.

Я вижу, что ваш код является функцией Javascript, поэтому я пытаюсь выяснить почему вы должны вызывать такую ​​функцию с Django системой шаблонов, как шаблонный вызов, и вы не можете вызвать функцию напрямую. Я думаю, что, делая так, как вы хотите, вы каждый раз принудительно перезагружаете DOM, и, я думаю, есть несколько способов открыть модал без ссылки на страницу sh.

...